web-dev-qa-db-fra.com

'System.Data.Entity.Infrastructure.DbUpdateException' s'est produite dans EntityFramework.dll

J'ai écrit un code assez simple (serveur client basé sur WCF et Windows) . J'essayais de mettre à jour la base de données pour pouvoir tester mon code et j'ai rencontré l'exception ci-dessus . ?

      // For testing 
      public void updateTable() 
      {
        using (var db = new overlayDBEntities())
        {
            var overlaydb = new overlayData
            {
                DeviceId = "1111",
                TimestampUTC = new DateTime(1990, 1, 1, 9, 9, 9),
                OverlayData1 = "Yoash And Maayan"
            };

            db.overlayData.Add(overlaydb);

            try
            {
                db.SaveChanges();
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            var overlaydb1 = new overlayData
            {
                DeviceId = "1111",
                TimestampUTC = new DateTime(2000, 2, 2, 10, 10, 10),
                OverlayData1 = "seconed seconed seconed "
            };

            db.overlayData.Add(overlaydb);

            try
            {
                db.SaveChanges();
            }
            catch (Exception ec) 
            {
                Console.WriteLine(ec.Message);
            }
        }
    }
5
user2656851

Si vous avez besoin de mettre à jour Row s'il existe déjà dans la base de données, n'utilisez pas context.Add (), vous pouvez utiliser comme suit.

    var overlaydb1 = new overlayData
    {
      DeviceId = "1111",
      TimestampUTC = new DateTime(2000, 2, 2, 10, 10, 10),
      OverlayData1 = "seconed seconed seconed "
    };

    try
    {
      db.overlayData.Attach(overlaydb1);
      db.ObjectStateManager.ChangeObjectState(overlaydb1, EntityState.Modified);
      db.SaveChanges();
    }

    catch (Exception ec) 
    {
      Console.WriteLine(ec.Message);
    }
2
Thilina H

Cette même erreur apparaît également lorsque l'utilisateur oublie d'ajouter Primery key dans une table particulière, puis d'ajouter des données via l'application.

1
Usman lqbal

Je pense que le problème est le type de votre date/heure. sqlsever a plus d'une date et heure. Si vous vérifiez votre exception interne, vous pourrez voir le type que vous essayez de mettre dans votre table et le type dont il a réellement besoin. la conversion ne peut pas être faite automatiquement et vous devriez la changer dans la table ou la convertir dans votre code ... il peut être datetime, datetime2 (7), etc.

1
noushin joudzadeh

Selon Lan, 

"Le message d'erreur détaille tout ce que vous devez savoir:

Informations complémentaires: Le modèle de sauvegarde du contexte 'AppraisalDBContext' a été modifié depuis la création de la base de données. Pensez à utiliser Code First Migrations pour mettre à jour la base de données ( http://go.Microsoft.com/fwlink/ ?

Cela signifie que l’une de vos classes utilisée dans AppraisalDBContext a été modifiée, mais la base de données n’a pas été mise à jour et est donc obsolète. Vous devez mettre à jour cette utilisation des migrations Code First. "

De The Original Post

0
Freddy Yang

Plusieurs enregistrements de données avec la même clé primaire se chevauchent lorsque add, provoquant la même erreur

Vous devriez revoir vos paramètres de clé principale

0
Triet Pham