Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用WCF Ria的实体框架ObjectContext生命周期_C#_Silverlight_Entity Framework 4_Wcf Ria Services - Fatal编程技术网

C# 使用WCF Ria的实体框架ObjectContext生命周期

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

我目前正在阅读70-516考试(访问数据)的自定进度培训工具包,我在关于实体框架的章节中

我现在谈到的是ObjectContext,它继承了IDisposable进行清理。这就引出了一些问题,我在研究时似乎无法得到确切的答案。我只是想了解事情是如何运作的


场景: 我已经使用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。听起来不错?比