2009-10-17 3 views
1

ADO.NET MVC 및 Entity Framework를 사용하여 데이터베이스에서 관련 엔터티의 그래프를로드하고 있습니다. 엔티티 중 하나는 메모리에서 수정해야하지만 그래프의 다른 엔티티가 변경 될 때 변경 사항을 데이터베이스에 보존하지 않아야합니다.엔티티 프레임 워크에서 읽기 전용 엔티티를 어떻게 만듭니 까?

MergeOption.NoTracking 및 MergeOption.OverwriteChanges를 사용하려고 시도했지만이 둘 모두 무시되는 것처럼 보입니다. 변경되지 않아야하는 엔티티 집합의 변경 사항이 저장소에 유지됩니다. 나는 또한 쿼리 만 실행되기 전에 건설 된 후 MergeOption을 설정하려고했습니다

QuizDBEntities entities = new QuizDBEntities(); 
ObjectParameter[] searchParameters = { new ObjectParameter("contestantID", contestantID) }; 
entities.QuestionSet.MergeOption = MergeOption.NoTracking; 

var query = entities.ContestantSet 
    .Include("Quiz.Questions.Categories.Options.Answer") 
    .Include("Answers") 
    .Include("Quiz.Questions.Filters.FilterAnswers") 
    .Where("it.ContestantID == @constestantID", searchParameters); 

Contestant contestant = query.First(); 

:

나는 데이터베이스에서 개체 그래프를로드하는 데 사용하는 코드의 조각

은 아래와 같습니다.

도움을 주시면 감사하겠습니다.

+0

쿼리가 생성 된 후 MergeOption은 entities.QuestionSet.MergeOption 또는 "query"변수에서 어떻게 설정 되었습니까? –

+0

이 게시물 이후 거의 2 년 후, 해결 방법을 찾았습니까? – tkerwood

답변

1

문제의 성격은 EF가 관계를 다루는 방식에 있습니다. EF에서 관계는 엔티티와 마찬가지로 일급 멤버입니다. 그래서 당신이 검색하는 객체 그래프는 사실 엔티티와 관계의 집합입니다. 객체 컨텍스트 내부의 모든 엔티티와 관계는 연결이 끊어진 객체 컨텍스트에 연결됩니다. 내가 처음 엔티티가 I이 명시 적으로 내 코드에서이 요구하지 않은 경우에도 ObjectContext를 부착했던 것으로 나타났습니다

, 나는 당황 조금했다 : 즉, 엔티티 프레임 워크 "플래티넘 규칙"입니다 Entity Framework가 "황금률"이라고 생각했던 것을 깨뜨리지 않기 때문에 신뢰할 수 있었기 때문에 구체적으로 말하지 않은 것은 아무것도하지 않았습니다. 그래프에 첨부 할 때 엔티티가 컨텍스트에 자동으로 첨부되는 이유와 그것이 필요한 이유를 이해하고 나면 이것이 엔티티 프레임 워크의 백금 규칙이되어야한다고 판단했습니다. 이는 이것이 황금률을 무시했기 때문입니다. 엔티티 프레임 워크

프로그래밍

Juile 러먼은 "골든 규칙은"은 EF가 명시 적으로 수행하도록 지시하지 않은 일을하지 않을 것이라고 말했다.

그래서 "읽기 전용"엔티티는 분리 된 엔티티입니다. 당신은 이미했던 것처럼 그것을 달성 할 수 있습니다. 또는 ObjectContext에서 Detach 메서드를 호출하면됩니다. 객체 그래프 내의 엔티티는, ObjectContext로부터 떼어 놓아 첨부 할 수도 있습니다.

+0

실제로 질문에 대답하지 않습니다. 단지 명백한 것을 지적합니다. – Justin

+0

글쎄, 그것이 그것이 행동하는 방식으로 행동하는 이유를 설명합니다. 또한 명백한 점은 동일한 그래프 내에서 엔티티를 연결하거나 분리 할 수 ​​없다는 점입니다. 나는 당신이 시작한 것을 구현하기 위해 당신의 솔루션을 다시 생각하고 재구성하는 것으로 충분하다고 생각합니다. 그러나, 나는 당신의 질문에 직접 대답하는 몇 가지 단어를 추가했습니다. 죄송합니다.이 답변을 읽는 데 시간을 낭비한 경우 ... –

관련 문제