2

我有一个实体框架 4 的 n 层应用程序设计问题。

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

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

我使用依赖注入来创建业务对象和数据访问层,因此我只使用接口,并且我的业务层不依赖于 EF。

我想使用 EF Compiled Queries 来提高性能。

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

所以编译的查询应该在业务层中定义,但我对 EF 没有依赖,也不希望保持松耦合,因此,我不能从那里调用 ObjectContext。

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

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

我已经尝试了很多东西,到处看了看,但找不到答案…… :( 看起来 EF 不适合那种 n 层应用程序。

4

1 回答 1

0

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

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

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

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

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

于 2012-06-18T10:04:53.927 回答