【发布时间】:2016-07-26 18:06:58
【问题描述】:
假设我有这样的方法:
public DbSet<Ingredient> GetIngredients(int limit = 0)
{
return db.Ingredients;
}
所以在我的控制器中,我可以这样调用:
var ingredients = GetIngredients()
.Include(i => i.AspNetUser)
.Include(i => i.AspNetUser1)
.Include(i => i.Ingredient_Category)
.Include(i => i.Measurement_Unit);
因为GetIngredients() 调用无论如何都会加载所有内容,它会毫无意义还是很慢?
如果是这样,有没有办法让GetIngredients() 使用各种包含作为参数?
最坏的情况我可以为每个场景在存储库中加载不同的方法(或者我应该这样做吗?感觉控制器应该说视图想要什么......或者 DbSet 是独一无二的EF 和我应该只从我的存储库返回 IEnumarables?)
非常感谢
【问题讨论】:
-
您需要澄清您的问题,如果您是 1. 不执行延迟加载,2. 正在执行延迟加载,但您更愿意在单个查询中请求所有内容,则使用包含。现在,如果您包含具有多对多关系的多个包含,您可能会想要单独加载它们以避免 carstesian 生产。您的问题仍然不清楚,但您是否想单独包含,因为您想对包含的内容应用过滤?
标签: asp.net-mvc performance entity-framework linq