J'ai rencontré un problème avec des insertions dans EF 4.0.EF 4.0 Batch Inserts Vs Exception d'insertion unique
Lors d'une migration d'un système à un autre, je migre les valeurs de trois tables de configuration dans une base de données précédée par EF.
Les accidents de code suivant:
foreach (MyModel model in models)
{
if(entities.my_Model.Where(p => p.Id == model.modelId).Count() == 0)
{
entities.AddTo_MyModel(new MyModel()
{Name = model.Name, Id = model.modelId});
}
}
entities.SaveChanges();
Notez que l'appel à SaveChanges se bloque avec une exception contrainte, ce qui indique que la valeur d'identité (PK) existe déjà. Je ne tente pas d'insérer des doublons.
Le code suivant DOES s'exécute correctement.
foreach (MyModel model in models)
{
if(entities.my_Model.Where(p => p.Id == model.modelId).Count() == 0)
{
entities.AddTo_MyModel(new MyModel()
{Name = model.Name, Id = model.modelId});
entities.SaveChanges();
}
}
Notez la sauvegarde déplacée.
Y at-il quelque chose que je ne comprends pas fondamentalement sur EF?
Tout à fait raison. Créer une variable locale pour ma fermeture a résolu le problème. – jhappoldt