如何在 n 层分层应用程序中使用 Entity Framework(4) 编译的查询



我在实体框架 4 中遇到了 n 层应用程序设计问题。

服务器端,我的应用程序有 3 层:- 一个服务层- 一个业务层- 一个数据访问层(使用 EF4)

实体是POCO,放置在独立的项目/程序集中。

我使用依赖关系注入来创建业务层和 DataAccess 层的对象,因此我只使用接口,并且在我的业务层中不依赖于 EF。

我想使用 EF 编译查询来提高性能。

但是我的(业务)查询是在业务层中定义的,因为在我的体系结构中,DataAccess 仅提供 CRUD 方法。

因此,

编译的查询应该在业务层中定义,但我不依赖于 EF,也不希望保持松散耦合,因此,我无法从那里调用 ObjectContext。

在 DataAccess 中定义查询并不适合我的应用程序设计。

那么有谁知道是否有一种通用方法可以将业务查询从业务层注入 DataAccess 层,以便我可以将它们与编译的查询一起使用?

我尝试了很多东西,到处找,都找不到答案...... :(看起来 EF 不适合这种 n 层应用程序。

编译的查询属于数据访问层,因为它是依赖于数据访问类的数据访问特定功能。如果您的设计不接受这一点,它根本就没有准备好使用数据访问特定功能=要么更改您的设计,要么不使用数据访问特定功能。

最简单的方法是将编译的查询添加到上下文中,并将它们公开为上下文中的方法:

public IQueryable<SomeEntity> SomeQuery(string someParam) {
    return compiledQuery.Invoke(this, someParam);
}

现在,您将把这些方法添加到上下文的接口中。

您可以遵循类似的方法,并在业务层中可见的任何数据访问接口上公开已编译的查询。

最新更新