Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 使用具有工作单元的实体框架的通用存储库模式连接多个表_Entity Framework_Generics_Repository_Unit Of Work - Fatal编程技术网

Entity framework 使用具有工作单元的实体框架的通用存储库模式连接多个表

Entity framework 使用具有工作单元的实体框架的通用存储库模式连接多个表,entity-framework,generics,repository,unit-of-work,Entity Framework,Generics,Repository,Unit Of Work,我正在使用实体框架5和MVC4开发一个web应用程序 我已经创建了通用存储库,用于使用工作单元访问数据库 拥有以下两个存储库 CustomerRepository-客户表 LibraryRepository-库表 这两个表没有相互链接,没有外键关系 希望通过组合这些存储库来编写查询。可以通过组合两个不同的存储库来编写查询吗 如果是,请告诉我方法。如果您的通用存储库公开IQueryable方法,您应该能够使用LINQ联接查询这两个存储库: var items = from c in custome

我正在使用实体框架5和MVC4开发一个web应用程序

我已经创建了通用存储库,用于使用工作单元访问数据库

拥有以下两个存储库

CustomerRepository-客户表 LibraryRepository-库表 这两个表没有相互链接,没有外键关系

希望通过组合这些存储库来编写查询。可以通过组合两个不同的存储库来编写查询吗


如果是,请告诉我方法。

如果您的通用存储库公开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子句进行两个单独的查询-我不相信LINQ2实体支持您正在尝试的操作。尝试将代码更新为以下内容:

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

将两个“from/Where”查询替换为“join/on”。

请查找我的代码。var customer=from cus in _customer.Query from lib in _library.Query,其中cus.LId==lib.Id选择cus.ToList;没有编译时错误。当运行代码时,我得到了以下异常。你能告诉我我做错了什么吗?LINQ to Entities无法识别方法'System.LINQ.IQueryable'1[Customer]Query'方法,并且此方法无法转换为存储表达式。变量_Customer和_library的类型是什么?这个错误似乎表明它们已经可以读取了。如果发生这种情况,请尝试从该语句中删除.Query方法调用,然后重试。_customer,_library是customer和library表的存储库。查询方法返回DBSet对象。请在下面找到通用存储库代码,public IDbSet ProductDbSet{get{return}u dbSet???\u dbSet=BaseDbContext.Set;}}}public IQueryable Query{IQueryable Query=ProductDbSet;return Query;}将查询更改为使用“join”后,代码运行良好。当使用“where”查询时,您能告诉我更多关于问题是什么吗?很高兴它对您有用,您会很感激接受它作为答案,因为它解决了您的问题。为了使这两个where正常工作,查询需要访问底层DbSet本身,而不是IQueryable。对于通用存储库接口,这往往与粒度相反。我总是使用join方法,所以也许其他人可以插话解释原因?