在EF中使用带有存储库模式的预编译linq查询

在EF中使用带有存储库模式的预编译linq查询,linq,entity-framework,entity-framework-4,repository-pattern,unit-of-work,Linq,Entity Framework,Entity Framework 4,Repository Pattern,Unit Of Work,是否可以对存储库使用预编译的linq查询。当前我的存储库设置如下 public class CustomerRepository : EntityRepository { private readonly IContext _context; public CustomerRepository(UnitOfWork uow) { _context = uow.context; } } 通过使用实际的上下文类MyEntiti

是否可以对存储库使用预编译的linq查询。当前我的存储库设置如下

public class CustomerRepository : EntityRepository
{
    private readonly IContext _context;
    public CustomerRepository(UnitOfWork uow)
        {
            _context = uow.context;
        }
}
通过使用实际的上下文类MyEntities,我将能够以以下方式创建预编译查询:ObjectContext,IContext

static Func<ObjectContext, int, Customer> _custByID;

public static Customer GetCustomer( int ID)
{
  if (_custByID == null)
  {
    _custByID = CompiledQuery.Compile<MyEntities, int, Customer>
     ((ctx, id) => ctx.Customers.Where(c => c.CustomerID == id).Single());
  }
  return _custByID.Invoke(_context, ID);
}
static Func\u custByID;
公共静态客户GetCustomer(内部ID)
{
如果(_custByID==null)
{
_custByID=CompiledQuery.Compile
((ctx,id)=>ctx.Customers.Where(c=>c.CustomerID==id.Single());
}
返回_custByID.Invoke(_context,ID);
}

问题在于编译方法TArg0采用从ObjectContext派生的类型。因为我将存储库与IContext一起使用的全部目的是隐藏实体框架相关的代码,所以使用上面的代码是没有意义的。如何使用预编译的linq查询。我应该将它们移动到引用我的模型和实体框架的单独类库中,还是我对存储库的理解不正确?我正在ASP.net应用程序中使用EF4

存储库实施应具备数据访问技术的知识。存储库的职责是与底层数据源对话,以满足契约要求。如果无法执行此类优化,那么拥有存储库将是无用的,因为
ObjectSet
已经是一个存储库。在存储库和EF之间创建另一个间接层是一个无用的抽象。

是有意义的。我相信我主要关心的是测试。我一直在使用一个假的上下文来测试我的存储库功能。我相信,如果不使用data strore?@nighthawk457涉及EF的代码不是经过单元测试的,而是经过集成测试的,我现在就无法使用预编译的linq查询来测试我的存储库功能。看见