2010-05-20 5 views
1

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?

Répondre

2

Je pense que le problème est avec la variable modèle ...

Si vous pouvez essayer avec:

foreach(MyModel model in models){ 
var id = model.Id; 
var name = model.Name 
if(entities.my_Model.Where(p => p.Id == id).Count() == 0) 
{ 
    entities.AddTo_MyModel(new MyModel() 
       {Name = name, Id = id}); 
     } 
} 
entities.SaveChanges(); 

OMI devrait fonctionner correctement ...

HTH.

+0

Tout à fait raison. Créer une variable locale pour ma fermeture a résolu le problème. – jhappoldt

Questions connexes