Fab*_*ian 6 c# sql entity-framework sql-server-2005 entity-framework-4
我使用索引视图,这是一个没有任何关系的实体(与我的表实体的关系将是更好的,但这似乎几乎不可能实现).这个视图由4个FK组成,它们共同构成了PK:
PortalID
CategoryID
BranchID
CompanyID
Run Code Online (Sandbox Code Playgroud)
现在我加入这个视图来选择这样一组公司:
var companies = (from c in database.Companies.FindAll().Include("City")
join l in database.CompanyList.FindAll() on c.ID equals l.CompanyID
where l.PortalID == 9 && l.BranchID == 1597
select c).Take(10);
Run Code Online (Sandbox Code Playgroud)
实体公司与表格(城市ID,城市)有关联,我想要包含并完美地运作.但是,当我加入视图时,.Include()被完全忽略,从而导致查询没有连接到cities表.
正如您可能已经使用存储库模式得出结论而FindAll()返回IQueryable并且我已经手动将Include扩展添加到IQueryable,如下所示:
public static IQueryable<T> Include<T>(this IQueryable<T> sequence, string path) {
var objectQuery = sequence as ObjectQuery<T>;
if (objectQuery != null)
return objectQuery.Include(path);
return sequence;
}
Run Code Online (Sandbox Code Playgroud)
我已经彻底测试了这个扩展,并且它应该像它一样工作
所以现在对于我的问题,为什么它忽略了最终表达式树中的Include操作,我怎么能阻止它这样做呢?
更新:
我从以下链接获得了我的解决方案:http:
//blogs.msdn.com/b/alexj/archive/2009/06/02/tip-22-how-to-make-include-really-include.aspx
这说我需要像这样重写我的查询:
var companies = (from c in database.Companies.GetAll()
join l in database.CompanyList.GetAll() on c.ID equals l.CompanyID
where l.PortalID == 9 && l.BranchID == 1597
select c).Include("City").Take(10);
Run Code Online (Sandbox Code Playgroud)
您的问题的答案为什么它忽略最终表达式中的 Include 操作?因为当您使用CompanyList连接Companies表时,此连接操作的结果实体类型是新类型,仅包含两种实体类型的原始类型属性,但如果您想包含城市,则必须将结果类型转换为 Company Type,然后调用 include City演员类型。
| 归档时间: |
|
| 查看次数: |
9930 次 |
| 最近记录: |