Вставить несколько записей, используя Linq to Entities (EF) - PullRequest
1 голос
/ 17 февраля 2010

У меня есть таблица карт (tblUserRoles), которая может содержать несколько записей. Когда я вставляю только одну запись, используя L2E, она сохраняет, но при попытке сохранить несколько записей это дает исключение. Я экономлю так:

foreach (tblUserRoles u in InsertUserRole)
{   
     EntityHelperUtil.AddObject(context, "tblUserRoles", (IEntityWithRelationships)u);                            
}

context.SaveChanges();

Я использую служебный класс EntityHelperUtil из (http://bernhardelbl.spaces.live.com/blog/cns!DB54AE2C5D84DB78!238.entry) Вот исключение:

AttachSingleObject(System.Object, System.Data.Metadata.Edm.EntitySet, System.String)---An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
   at System.Data.Objects.ObjectContext.AttachSingleObject(Object entity, EntitySet entitySet, String argumentName)
   at System.Data.Objects.DataClasses.RelatedEnd.AddEntityToObjectStateManager(IEntityWithRelationships entity, Boolean doAttach)
   at System.Data.Objects.DataClasses.RelatedEnd.AddGraphToObjectStateManager(IEntityWithRelationships entity, Boolean relationshipAlreadyExists, Boolean addRelationshipAsUnchanged, Boolean doAttach, HashSet`1 promotedEntityKeyRefs)
   at System.Data.Objects.DataClasses.RelatedEnd.IncludeEntity[U](U entity, Boolean addRelationshipAsUnchanged, Boolean doAttach, HashSet`1 promotedEntityKeyRefs)
   at System.Data.Objects.DataClasses.EntityCollection`1.Include(Boolean addRelationshipAsUnchanged, Boolean doAttach, HashSet`1 promotedEntityKeyRefs)
   at System.Data.Objects.DataClasses.RelationshipManager.AddRelatedEntitiesToObjectStateManager(Boolean doAttach)
   at System.Data.Objects.ObjectContext.AttachTo(String entitySetName, Object entity)
   at System.Data.Objects.ObjectContext.Attach(IEntityWithKey entity)
   at HealthSphereServices.EntityHelperUtil.AddRelationships(ObjectContext context, List`1 map) in E:\E_Drive data\ORB\ORB_Development\ControlRoom\ControlRoom\HealthSphereServices\EntityHelperUtil.cs:line 158

1 Ответ

1 голос
/ 17 февраля 2010

Похоже, у вас есть:

  1. Дублированное сгенерированное клиентом значение PK или
  2. Генерируемый сервером PK, который не отображается как таковой в вашем EDMX. Следовательно, EF не игнорирует значения PK для нового объекта.

Я не могу сказать больше, не увидев твою модель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...