使用通用存储库模式和实体框架以及工作单元来连接多个表

时间:2014-03-12 07:04:58

标签: entity-framework generics repository unit-of-work

我正在使用带有实体框架5的MVC4开发一个Web应用程序。

我创建了通用存储库,用于通过工作单元访问数据库。

拥有以下两个存储库,

  • CustomerRepository - 客户表
  • LibraryRepository - Library table

这两个表没有相互关联(没有外键关系)。

想要通过组合这些存储库来编写查询。是否可以通过组合两个不同的存储库来编写查询?

如果是,请告诉我。

1 个答案:

答案 0 :(得分:3)

如果您的通用存储库公开了IQueryable方法,您应该能够使用LINQ连接来查询这两个存储库:

var items = from c in customerRepository.AsQueryable()
            join l in libraryRepository.AsQueryable() on c.SomeProperty equals l.SomeOtherProperty
            select new { CustomerName = c.FirstName, LibraryName = l.Name };

查询可以有什么限制,但是我在两个独立的存储库之间在我自己的代码库上做了一个快速的概念证明,它运行得很好(预期的sql触发)。

<强>更新

您似乎正在尝试使用where子句进行两次单独查询 - 我不相信LINQ2Entities支持您尝试执行的操作。尝试将代码更新为以下内容:

var customer = (
    from cus in _customer.Query()
    join lib in _library.Query()
    on cus.LId equals lib.Id select cus
).ToList();

你要从哪里取代两个&#39;使用&#39; join / on&#39;。

进行查询