【发布时间】:2013-09-23 05:56:24
【问题描述】:
我是实体框架的新手。这是我第一个使用它的项目。
我创建了一个新类,它使用新属性扩展了我的“商家”实体,这些新属性主要是计算出的总数。我想不出用数据填充这些新属性的最佳方法。我正在使用微风.js 来查询 iQueryable 端点,因此我需要保持此功能完好无损。
我找到了以下解决方案,但它非常慢,因为我必须遍历每条记录。尽管我已经在微风中实现了分页,但循环仍然会命中每条记录,尽管它只返回一页。我想这就是实体框架的工作方式。我的问题是如何在不循环的情况下填充扩展属性?
这是我的代码,但它很慢。我可以消除这个循环并用一个值填充那个扩展属性吗?
[HttpGet]
public IQueryable<Merchant> MerchantList()
{
IQueryable<Merchant> items = _repo.Context.Merchants;
foreach (var item in items)
{
// Total Stores
item.TotalStores = myMethod(item.MerchantUID);
}
return items;
}
【问题讨论】:
-
您正在寻找
Include方法。 -
非常感谢您的回复。我正在研究这个 Include 方法,它似乎用于“急切加载”相关实体,通常会导致加入。我并没有真正理解这将如何帮助我将数据加载到扩展属性中并避免循环。如果您有时间,可以详细说明一下吗?
-
“myMethod”在做什么?根据您传递给它的内容,是否可以使用 Merchant 类中的其他属性来填充 TotalStores?
-
"myMethod" 是一个查询“Stores”表以获取商店总数的函数。我还需要包括其他几个属性,尽管它们也使用更复杂的查询来查询数据库。例如,商家的一些附加扩展属性是“生命周期价值”和“剩余试用天数”。理想情况下,我想摆脱这个循环,但如果它只处理当前页面......而不是整个表格,则循环可能没问题。
-
您需要显示
myMethod以获得正确答案。如果没有看到实现,就不可能猜出你在里面做什么以及如何改变它。
标签: c# .net entity-framework breeze iqueryable