2012-03-23 7 views
0

동일한 객체가 두 번 추가되는 것을 방지 할 수 있지만 다른 관련 객체를 추가하려면 보류중인 ID를 참조해야합니다.Linq 보류중인 삽입 중복 방지?

SomeData의 일부 불량 항목은 동일한 사용자를 두 번 추가하려고 할 수 있습니다. 추적 할 수는 있지만 보류중인 사람에게 정보 항목을 추가해야합니다. 이걸 내가 어떻게 관리하나요?

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

이 경우 당신이 더 많은 정보를 확인할 수있는 경우. –

답변

0

기본적으로 엔티티가 컨텍스트에 이미 첨부되어 있는지 확인해야합니다. 다음은이 작업 할 수있는 방법의 예입니다 : 당신이 무엇을 구별하게하는 것은,이 이름을 성 ID를입니다 별개 말할 때

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); 
     }