2012-03-23 104 views
0

我可以防止同一个对象被添加两次,但我仍然需要引用待处理的id来添加其他相关对象。避免Linq挂起插入的重复?

在下面,SomeData中的一些disctinct项目可能需要添加同一个人两次。我可以跟踪,但我仍然需要将不同的项目信息添加到待处理人员。我如何管理这个?

foreach(item i in SomeData) 
     { 
     var x = dc.People.Where(p.someprop==a...); 
     if (x=null) 
     { 
      Person p = new P(..); 
      dc.People.InsertOnSubmit(p); 
     } 
     ... 
     ... 
     } 

     dc.Submitchanges() 
+0

当你说清楚是什么使它不同是这个名字的姓氏身份证,如果这种情况下,你可以检查更多的信息。 – 2012-03-23 03:23:35

回答

0

基本上你需要检查实体是否已经连接到上下文。下面是你如何做这项工作的一个例子:

public static void SafeAttachTo<T>(this ObjectContext context, string entitySetName, ref T entity) where T : class { 
      ObjectStateEntry entry; 
      bool isDetached; 

      if (context.ObjectStateManager.TryGetObjectStateEntry(context.CreateEntityKey(entitySetName, entity), out entry)) { 
       isDetached = entry.State == EntityState.Detached; 
       entity = (T) entry.Entity; 
      } 
      else 
       isDetached = true; 

      if (isDetached) 
       context.AttachTo(entitySetName, entity); 
     }