Entity framework 如何在n层分层应用程序中使用实体框架(4)编译查询?

Entity framework 如何在n层分层应用程序中使用实体框架(4)编译查询?,entity-framework,n-tier-architecture,business-logic-layer,compiled,Entity Framework,N Tier Architecture,Business Logic Layer,Compiled,我在Entity Framework 4中遇到了一个n层应用程序设计问题 服务器端,我的应用程序有3层: -一个服务层(WCF) -一个业务层 -一个数据访问层(使用EF4) 实体为POCO,放置在独立的项目/部件中 我使用依赖项注入来创建业务层和数据访问层的对象,因此我只处理接口,在我的业务层中不依赖于EF 我想使用EF编译的查询来提高性能 但是我的(业务)查询是在业务层定义的,因为在我的体系结构中,DataAccess只提供CRUD方法 因此,编译后的查询应该在业务层中定义,但我对EF没有依

我在Entity Framework 4中遇到了一个n层应用程序设计问题

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

实体为POCO,放置在独立的项目/部件中

我使用依赖项注入来创建业务层和数据访问层的对象,因此我只处理接口,在我的业务层中不依赖于EF

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

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

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

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

那么是否有人知道是否有一种通用方法可以将业务查询从业务层注入到数据访问层,以便我可以将其用于已编译的查询?


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

编译查询属于数据访问层,因为它是依赖于数据访问类的特定于数据访问的功能。如果您的设计不接受这一点,它就是不准备使用特定于数据访问的功能=更改设计或不使用数据访问规范菲莎特色

最简单的方法是将复杂查询添加到上下文中,并将其作为上下文中的方法公开:

public IQueryable<SomeEntity> SomeQuery(string someParam) {
    return compiledQuery.Invoke(this, someParam);
}
public可查询的SomeQuery(字符串someParam){
返回compiledQuery.Invoke(this,someParam);
}
现在,将这些方法添加到上下文的接口中


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

已编译查询属于数据访问层,因为它是依赖于数据访问类的数据访问特定功能。如果您的设计不接受这一点,则它根本不适合数据访问特定功能=或ge提供您的设计或不使用数据访问特定功能

最简单的方法是将复杂查询添加到上下文中,并将其作为上下文中的方法公开:

public IQueryable<SomeEntity> SomeQuery(string someParam) {
    return compiledQuery.Invoke(this, someParam);
}
public可查询的SomeQuery(字符串someParam){
返回compiledQuery.Invoke(this,someParam);
}
现在,将这些方法添加到上下文的接口中


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

thanx,这是我不想读的,但知道我会……:)thanx,这是我不想读的,但知道我会……:)