C# 使用WCF Ria的实体框架ObjectContext生命周期
我目前正在阅读70-516考试(访问数据)的自定进度培训工具包,我在关于实体框架的章节中 我现在谈到的是ObjectContext,它继承了IDisposable进行清理。这就引出了一些问题,我在研究时似乎无法得到确切的答案。我只是想了解事情是如何运作的C# 使用WCF Ria的实体框架ObjectContext生命周期,c#,silverlight,entity-framework-4,wcf-ria-services,C#,Silverlight,Entity Framework 4,Wcf Ria Services,我目前正在阅读70-516考试(访问数据)的自定进度培训工具包,我在关于实体框架的章节中 我现在谈到的是ObjectContext,它继承了IDisposable进行清理。这就引出了一些问题,我在研究时似乎无法得到确切的答案。我只是想了解事情是如何运作的 场景: 我已经使用WCF Ria和实体框架并使用MVVM Lite模式创建了一个Silverlight应用程序。我制作了我的EDMX并创建了一个名为FamilyService的域服务,我在silverlight应用程序中将其用作FamilyC
场景: 我已经使用WCF Ria和实体框架并使用MVVM Lite模式创建了一个Silverlight应用程序。我制作了我的EDMX并创建了一个名为FamilyService的域服务,我在silverlight应用程序中将其用作FamilyContext。我创建了一个名为GetFamilyMembers的方法,该方法从FamilyMember表返回数据
[EnableClientAccess()]
public partial class FamilyService : LinqToEntitiesDomainService<FamilyEntities>
{
public IQueryable<FamilyMember> GetFamilyMembers()
{
return this.ObjectContext.FamilyMembers;
}
}
[EnableClientAccess()]
公共部分类家庭服务:LinqToEntitiesDomainService
{
公共IQueryable GetFamilyMembers()
{
返回this.ObjectContext.FamilyMembers;
}
}
在我的ViewModel中,我在构建FamilyContext时创建它的一个实例,并在清理时将其设为null
1) 当我将FamilyContext对象设为null时,它是否与服务器上的ObjectContext有任何关系?我这样问是因为我从未在域服务中手动创建或处置它 2) 我知道在实体框架中运行查询时,它会缓存数据。在RIA场景中,数据缓存是在客户端应用程序的FamilyContext上,还是仍然驻留在服务器的ObjectContext上?我只是好奇ObjectContext是否拥有缓存,因为我的应用程序中的每个viewmodel都会创建自己的FamilyContext实例,我想知道viewmodels是否会因为清理而变得轻松,但仍然可以利用缓存
提前感谢。您需要进一步区分 (您的FamilyService)是服务器逻辑的一部分,每次对您的服务进行请求/方法调用(例如
查询
,更新
,插入
,删除
,调用
)时,都会创建该服务的实例。这是由ASP.NET/WCF RIA服务运行时完成的
如果要控制如何创建DomainServices实例,则需要实现自己的实例。但这是一个高级场景
因此,每个请求都会获得自己的DomainService
实例,DomainService
也会获得自己的ObjectContext
实例。调用完成后,将释放ObjectContext。此场景中的缓存仅在请求期间多次查询ObjectContext时发生
是域服务的有状态客户端表示,提供对服务所有功能的访问。它提供一个缓存(又名.EntityCollections),其中包含从域服务加载的实体。缓存还用于更新或删除加载的实体以及插入新实体。需要提交缓存上的更改,以便在DomainService
上调用相应的方法来更新、删除或插入实体
DomainContext的实例是使用类的构造函数创建的,通常由您来创建和清理DomainContext的实例。因此,将DomainContext设置为null在服务器端没有任何作用。您需要进一步区分
(您的FamilyService)是服务器逻辑的一部分,每次对您的服务进行请求/方法调用(例如查询
,更新
,插入
,删除
,调用
)时,都会创建该服务的实例。这是由ASP.NET/WCF RIA服务运行时完成的
如果要控制如何创建DomainServices实例,则需要实现自己的实例。但这是一个高级场景
因此,每个请求都会获得自己的DomainService
实例,DomainService
也会获得自己的ObjectContext
实例。调用完成后,将释放ObjectContext。此场景中的缓存仅在请求期间多次查询ObjectContext时发生
是域服务的有状态客户端表示,提供对服务所有功能的访问。它提供一个缓存(又名.EntityCollections),其中包含从域服务加载的实体。缓存还用于更新或删除加载的实体以及插入新实体。需要提交缓存上的更改,以便在DomainService
上调用相应的方法来更新、删除或插入实体
DomainContext的实例是使用类的构造函数创建的,通常由您来创建和清理DomainContext的实例。因此,将DomainContext设置为null在服务器端没有任何作用。您不创建或处理ObjectContext
?这怎么可能?我不是手动操作,我假设它在LinqToEntitiesDomainService基类中?更新问题您没有创建或处理ObjectContext
?这怎么可能?我不是手动操作,我假设它在LinqToEntitiesDomainService基类中?更新问题谢谢,我相信你已经澄清了这一点。请仔细检查,每个viewmodel的my FamilyContext(在vm的构造函数上创建,在vm的清理事件中为空)都有一个独立的客户端数据缓存,该缓存基于它自己对域服务的调用。在每次调用时,域服务都会创建一个objectcontext实例,使用它,然后处理它,这样objectcontext上的所有缓存数据都会消失。总而言之,我应该善于清理,因为域服务处理服务器端对象,我正在手动清理客户端FamilyContext。听起来不错?比