2010-06-06 5 views
4

작은 프로젝트에서 처음으로 EF 4와 POCO를 시도하고 있습니다. 내 리포지토리 구현에서 새로 추가 된 경우 전달 된 POCO를 저장소에 추가하는 AddOrUpdate 메서드를 제공하고 싶지 않습니다. SaveChanges가 호출 될 때 업데이트 된 POCO가 저장되므로 아무 것도 수행하지 않습니다.EF 4 POCO가 이미 ObjectSet에 있는지 확인하십시오.

내 첫번째 생각은이 작업을 수행하는 것이 었습니다 :

public void AddOrUpdate(Poco p) 
{ 
    if (!Ctx.Pocos.Contains<Poco>(p)) 
    { 
     Ctx.Pocos.AddObject(p); 
    } 
} 

그러나 Referencing Non-Scalar Variables Not Supported에서 문서화로 NotSupportedException 결과 그 (보너스 질문 : 그 이유는 지원되지 않을 것이다)

는 그냥 Contains 부분 제거 항상 AddObject를 호출하면 InvalidStateException이됩니다.

동일한 키가 이미있는 객체 이 ObjectStateManager에 있습니다. 기존 개체는 변경되지 않음 상태입니다. 이 추가 된 상태 인 경우에만 객체를 ObjectStateManager에 다시 추가 할 수 있습니다.

분명히 EF 4는 이것이 키를 기반으로하는 복제본임을 알고 있습니다.

SaveChanges()에 대한 후속 호출이 올바른 작업을 수행 할 수 있도록 AddOrUpdate가 호출 될 때 저장소가 새 객체 또는 기존 객체에 대해 Pocos를 업데이트하는 명확하고 효율적인 방법은 무엇입니까?

나는 객체 자체에 isNew 플래그를 가지고 다니는 것을 고려했지만, 나는 가능한 한 영속성을 무시하려고 노력하고있다.

+2

아 그래, 너도 성공의 EF4 구덩이에 빠지지 않도록 관리하는 것 같습니다. – Will

+0

@ 윌 : 나는 S # arpArchitect와 NHibernate를 강력하게 고려하고 있지만 VS2010과 .Net을 지원하기 시작한 것 같습니다. 4. 경로가 더 쉬울 지 확신하지 못합니다. –

답변

관련 문제