【发布时间】:2009-12-23 02:14:26
【问题描述】:
我有一个通用存储库,当我使用 DoQuery 方法从数据库中选择对象时,我需要加载一些相关实体,以免在作为外键的字段位置出现空值。
问题是存储库是通用的,所以我不知道有多少属性需要加载或它们的名称是什么(除非有某种获取它们的方法)我怎样才能使所有外键都有它们的实体已加载,同时仍保持此存储库通用?
DoQuery 方法如下:
public ObjectQuery<E> DoQuery(ISpecification<E> where)
{
ObjectQuery<E> query = (ObjectQuery<E>)_ctx.CreateQuery<E>("[" + typeof(E).Name + "]").Where(where.EvalPredicate);
return query;
}
还有一个link to the original code for the entire repository.
我之前发布过一次,但从未得到答案,但我认为这个更相关,因为在人们假设我知道属性名称并且可以这样做之前:
.Include("PropertyNameIKnowNeedsToBeLoaded")
这是question I posted before,希望能提供一些关于我在这方面的情况的信息。
感谢任何帮助。
谢谢,
马特
【问题讨论】:
-
您是否至少知道调用通用存储库时的关系?
-
如果您按照规则加载所有相关属性,您可能会看到在一般情况下查询性能不佳。其影响可能很大。我通常在查询中使用投影来仅加载我需要的类型。我在这里更详细地解释了这一点:blogs.teamb.com/craigstuntz/2009/09/11/38394
-
是的,我确实知道从我打电话的那一刻起的关系。我可以以某种方式传递它并让它以此为基础拉动它们吗?任何人的例子?
标签: asp.net-mvc entity-framework repository lazy-loading eager-loading