DataContext创建在哪个层?

时间:2010-11-05 03:33:44

标签: silverlight frameworks entity data-access-layer datacontext

我正在使用RIA创建一个新的Silverlight应用程序。我正在使用业务层和数据访问层,它看起来像这样......

Silverlight-> ASP.Net/RIA-> C#BLL类库 - > C#DAL类库 我的实体框架模型可以在所有层中访问。

我不确定在哪里为我的Entity Framework请求创建DataContext。我应该在RIA(ASP.Net)层创建上下文并将其传递给BLL,然后传递给DAL,还是应该在DAL中创建它并将LINQ结果传递回去?

如果我在DAL中创建并重新传递实体,则延迟加载意味着数据尚未存在。在我有机会从数据库中实际查询数据之前,我的上下文是否可能被垃圾收集?

如果我在DAL中创建上下文,是否会遇到线程问题?

2 个答案:

答案 0 :(得分:0)

您在应用程序的Silverlight(客户端)部分中创建数据上下文。我通常将我的上下文留在我的类中的变量中,以便我可以重用它。在对类的所有引用都消失之前,它不会被垃圾收集。这是一个简短的示例,异步地从数据库中加载一些对象(实体)(通过回调来处理返回的对象):

public class MyClass

    private _context as MyDomainContext
    private _employees as list(of Employees)

    public sub DoSomething()
        _context = new MyDomainContext
        _context.Load(_context.GetEmployeesQuery(), AddressOf EmployeesLoaded, Nothing)
    end sub

    public sub EmployeesLoaded(loadOp as LoadOperation(Of Employee))
        _employees = new list(of Employee)(loadOp.entities)
    end sub

end class

答案 1 :(得分:0)

如果你正在使用RIA服务,你也可以使用LinqToEntitiesDomainService< EfModelGoesHere >并让RIA服务拥有一个EF DataContext / model。

我们使用自己的自定义POCO进行业务逻辑,但RIA服务管理从客户端到各种数据层(包括直接到EF)的所有连接。如果需要,我们传递单个EF模型(存储在域上下文的ObjectContext成员中)。

保留EF引用是正确的,而不是切换到纯粹的DomainService,并且为Domain Service添加快速(临时)添加非常简单,因为我们只是LINQ指向EF模型。如果我们将其降低,我们就会不断将其拉回到RIA层以便利用它。