2010-02-17 69 views
1

我有一個可以包含多個記錄的映射表(tblUserRoles)。當我只使用L2E插入一條記錄時,它會保存,但是當嘗試保存多條記錄時,它會給出例外。我保存這樣的:使用Linq插入多個記錄到實體(EF)

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. 重複的客戶端生成的PK值或
  2. 服務器生成的PK,在您的EDMX中沒有這樣映射。因此,EF不會忽略新對象上的PK值。

我不能說沒有看到你的模型更多。