2012-04-02 3 views
3

트랜잭션 내에서 ObjectContext.SaveChanges()이 발생하기 때문에 SaveChanges()을 데이터베이스에 쓰려면 먼저 ObjectContext에서 모든 쿼리/업데이트를 먼저 수행하는 것이 내 앱에 가장 적합하다고 판단했기 때문에 .데이터베이스에 유지하지 않고 ObjectContext의 모든 변경 반영

그러나 이렇게하면 개체를 만들고 하위 쿼리로 하위 쿼리 (ObjectContext)가 존재한다는 것을 의미합니다 (데이터베이스가 아직 업데이트되지 않았기 때문에). SaveOptions 중 일부를 가지고이 문제를 해결할 수 있다고 생각했지만 가능한 것처럼 보이지 않습니다.

기본적으로 ObjectContext은 내가 한 번에 모두 커밋하고 싶은대로 수정할 수있는 프록시처럼 작동해야합니다. 내가 이것을 달성 할 수있는 방법이 있습니까?

답변

6

변경 사항을 저장하지 않으면 새 객체가 데이터베이스에 존재하지 않으며 데이터베이스에 대해 쿼리가 실행되지 않습니다 (= 엔티티 쿼리에 대한 Linq 없음). 컨텍스트에 추가 개체를 얻을 수 있지만 아직 당신이 ObjectStateManager 쿼리해야 저장하려면

키와 값의 목록을 감안할 때 : 나는 비슷한 상황에서이 라인을 따라 뭔가를 했어

var data = context.ObjectStateManager 
        .GetObjectStateEntries(EntityState.Added) 
        .Where(e => !e.IsRelationship) 
        .Select(e => e.Entity) 
        .OfType<YourEntityType>(); 
0

을 일부 키는 새롭고 하나의 SaveChanges에 키/값을 업데이트/삽입하려는 경우 먼저 기존 키를 모두 내린 다음 개의 컬렉션을 keysIncludingNewOnes으로 유지합니다.이 키는 기존 키를 포함하지만 또한 새로 만든 키가 추가됩니다.

값과 연결할 키 객체를 찾고있을 때 문맥이 쿼리가 아닌 새로운 키에 대해 알지 못하기 때문에 문맥을 쿼리하는 대신 keysIncludingNewOnes을 봅니다. SaveChanges.

'보류중인 추가'개체에 대해 비교적 쉽게 기억해야합니다. 그렇지 않은 경우 일반적으로 고유 한 문제를 만드는 너무 오래 사는 상황을 가질 수 있습니다.

관련 문제