2012-03-13 2 views
12

지연로드 및 변경 추적을 사용해야 할 때 프록시가 사용된다는 것을 읽었습니다. 즉, Lazy Loading을 사용하려면 프록시를 활성화해야합니다.EF 4 - 프록시가없는 지연로드

지금까지 그렇게 좋았습니다.

요점은 내가 프록시를 사용하지 않고 심지어 게으른 로딩을 사용하도록 컨텍스트를 설정하기 위해 코드 울부 짖는 소리를 사용할 수 있다는 것입니다.

ctx = new SchoolEntities(); 
ctx.ContextOptions.ProxyCreationEnabled = false; 
ctx.ContextOptions.LazyLoadingEnabled = true; 

ProxyCreationEnabled 속성은 추적 프록시를 변경하는 것과 관련이 있습니까?

누군가가 세부 사항을 설명해 주시겠습니까?

감사합니다. 미안이 POCO/DbContext를 사용하지

EDIT1

. 나는 ObjectContext와 함께 정규 edmx EF 모델을 사용하고있다. 나는 추적 및 게으른 로딩을 변경하는 것과 관련하여 POCO 기관에 대한 프록시의 중요성을 알고 있습니다. 일반 EDMX 모델에서 프록시를 사용하는 이유는 무엇입니까?

답변

10

Entity Framework의 기본 기능을 사용하여 POCO 엔터티를 사용하는 경우 지연로드를 사용하려면 프록시 만들기를 사용하도록 설정해야합니다. 따라서 POCO 엔티티에서 ProxyCreationEnabled가 false 인 경우 LazyLoadingEnabled가 true로 설정된 경우에도 지연로드가 발생하지 않습니다.

특정 유형의 레거시 엔티티 (특히 EntityObject에서 파생 된 엔티티)에서는 ProxyCreationEnabled가 false로 설정된 경우에도 지연로드가 작동하지 않습니다. 그러나 EntityObject 엔티티를 사용해야한다는 것을 의미하지는 마십시오. 그러면 더 많은 고통을 느끼게 될 것입니다.

ProxyCreationEnabled 플래그는 일반적으로 EF가 프록시를 만들지 않으려는 경우 false로 설정됩니다. 이는 수행중인 일련 화 유형에 문제가 발생할 수 있기 때문일 수 있습니다.

LazyLoadingEnabled 플래그는 일반적으로 프락시가 정상이라고 결정하면 컨텍스트 전반에서 지연로드를 발생 시킬지 여부를 제어하는 ​​데 사용됩니다. 예를 들어, 변경 추적에 프록시를 사용하고 지연로드를 해제 할 수 있습니다.

+0

'EntityObject'는 "레거시 엔티티"입니다. 언제 [Obsolete] 속성으로 표시하기 시작합니까? – Slauma

+0

좋은 질문입니다. 나는 그것이 언제 일어날 지, 내가 언제 알지 못하기 때문에 대답 할 수 없다. 그러나 우리는 그것을 논의했습니다. –

+0

@ajcvickers, 답장을 보내 주셔서 감사합니다. 그러나 올바르게 이해하지 못한다면, 나는 ObjectContext (DbContext 아님)를 사용하고 있다면 ProxyCreationEnabled를 사용하는 것이 가장 중요하다고 생각합니다. 변경 추적을 사용 하시려면? 내가 전에 말했듯이, 이것은 게으른 로딩을위한 것이 아닙니다. 그래서 무엇을 위해서입니까? – outlookrperson