우리는 Windows Azure 환경에서 Entity Framework를 사용하고 있으며 지금까지 InProc 세션 상태를 사용하고 있었지만 일부는 알 수 있듯이 분산 된 특성으로 인해 다른 방법을 사용해야합니다 Azure AppFabric Cache를 활성화 한 이유입니다.세션 Azure 캐시의 EF 동적 프록시
우리는 다음과 같은 예외를 느끼기 시작하고이 세션 상태 제공자를 활성화하는 경우 : AppFabric 캐시에 EF 객체를 직렬화 할 때
ObjectDisposedException: The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.]
System.Data.Objects.ObjectContext.EnsureConnection() +11658009
System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) +66
System.Data.Objects.DataClasses.EntityCollection`1.Load(List`1 collection, MergeOption mergeOption) +271
System.Data.Objects.DataClasses.RelatedEnd.DeferredLoad() +499
System.Data.Objects.Internal.LazyLoadBehavior.LoadProperty(TItem propertyValue, String relationshipName, String targetRoleName, Boolean mustBeNull, Object wrapperObject) +136
System.Data.Objects.Internal.<>c__DisplayClass7`2.<GetInterceptorDelegate>b__1(TProxy proxy, TItem item) +153
System.Data.Entity.DynamicProxies.SysUser_1A4439A55EAE70AD5C976139AA3A390B54A2C96E5FA605B3F364F0ADF52D0707.get_Assignments() +151
WriteSysUser_1A4439A55EAE70AD5C976139AA3A390B54A2C96E5FA605B3F364F0ADF52D0707ToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , ClassDataContract) +544
...
이 예외가 발생 될 것으로 보인다입니다.
LazyLoading 및 ProxyCreation 플래그가 모두 활성화 된 EF를 사용하고 있으며이 시나리오에서는 지원되지 않는 것 같지만 InProc 세션 상태 관리에있었습니다.
지연로드를 유지하면서 Azure AppFabric 세션 상태 공급자를 EF와 함께 사용하는 방법에 대한 제안 사항을 찾고 있습니다.
감사합니다, 루이
InProc 세션을 사용할 때 작동하는 것에 대한 답변을 주셔서 감사합니다. 유일한 방법은 직렬화가 다른 방식으로 수행된다는 것입니다. 오류가 발생한 곳인 것처럼 보이기 때문에 우리는 프로젝트는 InProc에서 Azure 캐시에 이르는 세션 구성이었고 다른 모든 논리는 동일합니다. 우리는 여전히 게으른 로딩을 원하므로 세션에서 엔티티를 저장할 수 있습니까? 그렇다면, 그것을하는 방법은 먼저 그들을 분리 무엇입니까? 어떻게 할 수 있니? – Rui
InProc 세션은 직렬화를 사용하지 않습니다. 기존 객체에 대한 참조 만 보유합니다. 컨텍스트에서 'Detach'를 호출하여 엔티티를 분리 할 수는 있지만 한번만 수행하면 더 이상 지연로드가 허용되지 않으며 세션에 저장된 포인트 엔티티가 나중에 지연로드를 사용할 수 없습니다. –
캐싱을 한 후에는 해당 항목에 대한 지연로드가 더 이상 사용할 수 없다는 것을 알고 있습니다. 엔터티를 세션에 보내기 전에 detach를 호출하기 만하면 작동하지 않는 것 같습니다. 좀 더 명확히하기 위해, 이제는 논리의 나머지 부분에서 게으른로드를 유지하면서 기본 속성 (실제 POCO)과 세션에 일부 EF 항목을 저장할 수있는 기능을 제공하는 것이 목표입니다. 새로운 수업을 만들지 않고이 목표를 달성 할 수있는 방법을 알고 있습니까? – Rui