gpt4 book ai didi

c# - 使用 Entity Framework 加入 View 时使用 .Include()

转载 作者:太空狗 更新时间:2023-10-29 22:01:50 26 4
gpt4 key购买 nike

<分区>

我使用的是索引 View ,它是一个没有任何关系的实体(最好与我的表实体建立关系,但这似乎几乎不可能实现)。该 View 由 4 个 FK 组成,它们共同构成了 PK:

PortalID
CategoryID
BranchID
CompanyID

现在我加入这个 View 来选择一组这样的公司:

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);

实体 Company 与表 Cities (CityID, City) 有关联,我想将其包含并完美运行。然而,当我加入 View 时,.Include() 被完全忽略,因此导致查询没有连接到城市表。

您可能已经得出结论,我使用存储库模式并且 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;
}

我对这个扩展进行了彻底的测试,并且可以正常工作。

那么现在我的问题是,为什么它会忽略最终表达式树中的 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);

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com