2012-10-02 4 views
1

현재 70-516 시험 (데이터 액세스)을위한자가 학습 키트를 읽고 있으며 Entity Framework에 대한 장을 읽었습니다.WCF를 사용하는 Entity Framework ObjectContext 수명주기

내가 ObjectContext에 대해 말하고 정리를 위해 IDisposable을 상속 한 시점에 있습니다. 이것은 연구 할 때 정확한 답을 얻을 수없는 몇 가지 질문을 제기했습니다. 나는 일이 어떻게 작동하는지 이해하려고 노력하고 있습니다.


시나리오 : 나는 WCF 리아와 엔티티 프레임 워크를 사용하여 Silverlight 응용 프로그램을 작성 MVVM 라이트 패턴을 사용했습니다 . EDMX를 만들었고 FamilyService라는 도메인 서비스를 만들었습니다.이 서비스는 Silverlight 응용 프로그램에서 FamilyContext로 사용합니다. FamilyMember 테이블에서 데이터를 반환하는 GetFamilyMembers라는 메서드를 만듭니다.

[EnableClientAccess()] 
public partial class FamilyService : LinqToEntitiesDomainService<FamilyEntities> 
{ 
    public IQueryable<FamilyMember> GetFamilyMembers() 
    { 
     return this.ObjectContext.FamilyMembers; 
    } 
} 

내 ViewModel에서 구성 할 때 FamilyContext의 인스턴스를 만들고 null로 정리합니다.


1) FamilyContext 객체를 null로 설정하면 서버의 ObjectContext와 관련된 작업을 수행합니까? 도메인 서비스에서 수동으로 생성하거나 처리하지 않기 때문에이 질문을합니다.

2) Entity Framework에서 쿼리를 실행하면 데이터가 캐시된다는 것을 이해합니다. RIA 시나리오에서 클라이언트 응용 프로그램의 FamilyContext에 대한 데이터 캐시를 수행합니까? 아니면 여전히 서버의 ObjectContext에 있습니까? 내 응용 프로그램의 각 viewmodel이 ViewController의 자체 인스턴스를 만들고, ViewModels가 정리에 의해 밝아졌지만 캐싱을 여전히 활용할 수 있는지 궁금해하기 때문에 ObjectContext에 캐시가 저장되어 있는지 궁금합니다. 사전에

감사합니다.

+1

'ObjectContext'를 만들거나 처리하지 않으시겠습니까? 어떻게 그렇게 될수 있니? –

+0

수동으로 해달라고하지 않습니다. LinqToEntitiesDomainService 기본 클래스에서 가정합니다. 질문 업데이트하기 –

답변

0

좀 더 구별해야합니다.

DomainService (검색 FamilyService)는 서버 로직의 일부로서 상기 서비스의 인스턴스마다 요청/방법 호출을 생성한다 (예 QueryUpdateInsertDelete, Invoke)는 서비스에 이루어진다 . 이 작업은 ASP.NET/WCF RIA Services 런타임에서 수행합니다.

도메인 서비스의 인스턴스를 생성하는 방법을 제어하려면 자신의 DomainServiceFactory을 구현해야합니다. 그러나 이것은 고급 시나리오입니다.

그래서 각 요청은 DomainService의 자체 인스턴스를 가져옵니다 그래서 DomainServiceObjectContext의 자체 인스턴스를해야합니다. 호출이 완료되면 ObjectContext가 삭제됩니다. 이 시나리오에서 캐싱은 요청하는 동안 ObjectContext를 여러 번 쿼리 할 때만 발생합니다.

DomainContext은 서비스의 모든 기능에 대한 액세스를 제공하는 도메인 서비스의 클라이언트 측 표현입니다. DomainService에서로드 된 entites를 포함하는 캐시 (일명. EntityCollections)를 제공합니다. 캐시는로드 된 Entites를 업데이트 또는 삭제하고 새 엔티티를 삽입하는데도 사용됩니다. 캐시의 변경 사항을 제출해야 해당 항목이 DomainService에서 호출되어 항목을 업데이트, 삭제 또는 삽입 할 수 있습니다.

DomainContext의 인스턴스는 클래스의 생성자를 사용하여 만들어지며 일반적으로 DomainContext의 인스턴스를 만들고 정리하는 데 사용됩니다. 따라서 DomainContext를 null로 설정하면 서버 측에서 아무 작업도 수행하지 않습니다.

+0

감사합니다. 귀하가이 문제를 해결했다고 생각합니다. 다시 확인하기 만하면 각 viewmodel의 FamilyContext (VM의 생성자에서 생성되고 VM의 정리 이벤트에서 제외됨)에는 도메인 서비스에 대한 자체 호출을 기반으로 클라이언트 측 데이터의 독립적 인 캐시가 있습니다. 각 호출에서 도메인 서비스는 objectcontext의 인스턴스를 만들고이를 사용하고 폐기합니다. 따라서 ObjectContext의 모든 캐시 된 데이터는 사라집니다. 따라서 도메인 서비스가 서버 측 객체를 처리하고 클라이언트 측 FamilyContext를 수동으로 정리하고 있기 때문에 정리 작업을 잘 수행해야합니다. 맞지? –

+0

@ user1713224 : 네, 맞습니다. – Jehof

관련 문제