2012-03-23 157 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); 
     }