1

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

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


场景: 我使用 WCF Ria 和实体框架创建了一个 Silverlight 应用程序,并使用 MVVM Lite 模式。我制作了我的 EDMX 并创建了一个名为 FamilyService 的域服务,我在 silverlight 应用程序中将其用作 FamilyContext。我创建了一个名为 GetFamilyMembers 的方法,该方法从 FamilyMember 表中返回数据。

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

在我的 ViewModel 中,我在构建 FamilyContext 时创建了一个实例,并在清理时将其设为空。


1) 当我为 FamilyContext 对象设置 null 时,它会对服务器上的 ObjectContext 做任何事情吗?我问这个是因为我从不在域服务中手动创建或处置它。

2) 我知道当我在 Entity Framework 中运行查询时,它会缓存数据。在 RIA 场景中,数据是缓存在客户端应用程序上的 FamilyContext 上,还是仍然驻留在服务器上的 ObjectContext 上?我只是好奇 ObjectContext 是否拥有缓存,因为我的应用程序中的每个视图模型都创建了自己的 FamilyContext 实例,想知道视图模型是否因清理而减轻,但仍然可以利用缓存。

提前致谢。

4

1 回答 1

1

你需要多区分一点。

DomainService (您的 FamilyService)是您的服务器逻辑的一部分,每次在您的服务上进行请求/方法调用(例如Query, Update, Insert, Delete, Invoke)时都会创建一个服务实例。这是由 ASP.NET/WCF RIA 服务运行时完成的。

如果要控制如何创建 DomainServices 实例,则需要实现自己的DomainServiceFactory。但这是一个高级场景。

因此,每个请求都有自己的实例,DomainService因此也将DomainService拥有自己的ObjectContext. 调用完成后,ObjectContext 将被释放。只有在请求期间多次查询 ObjectContext 时才会发生这种情况下的缓存。

DomainContext是域服务的有状态客户端表示,提供对服务所有功能的访问。它提供了一个缓存(又名 EntityCollections),其中包含从DomainService. 缓存还用于更新或删除加载的实体以及插入新实体。需要提交对缓存的更改,以便调用相应的方法DomainService来更新、删除或插入您的实体。

DomainContext 的实例是使用类的构造函数创建的,通常由您来创建和清理 DomainContext 的实例。因此,将 DomainContext 设置为 null 在服务器端没有任何作用。

于 2012-10-02T06:24:45.057 回答