要模拟延迟加载,我希望有一个递归方式通过Eager Loading加载完整的对象图,以便在加载实体时,其所有相关数据是加载以及。我如何递归地包含所有可导航的属性来模拟延迟加载
从MSDN文档:
- 包括单个参考:query.Include(E => e.Level1Reference)。
- 要包含单个集合:query.Include(e => e.Level1Collection)。
- 要包含引用,然后向下引用一个引用:query.Include(e => e.Level1Reference.Level2Reference)。
- 要包含引用,然后向下包含一个集合:query.Include(e => e.Level1Reference.Level2Collection)。
- 要包含一个集合,然后向下引用一个引用:query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Reference))。
- 要包含一个集合,然后向下一级集合:query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Collection))。
- 要包含一个集合,然后向下引用一个引用:query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Reference))。
- 要包含一个集合,然后向下一级集合:query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Collection))。
- 要包含一个集合,一个引用和一个引用两个层次:query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Reference.Level3Reference))。
- 要包括一个集合,一个集合和一个引用两个级别:query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Collection.Select(l2 => l2.Level3Reference)))。
问:
我怎样才能递归包括所有通航性能和建造这个为通用仓库方法,以便在需要时我可以得到一个实体的深对象图,无论如果添加了新的特性?
你可能不希望这样做。查询中包含的数量建议不要超过三个。尤其是当包含导致星形查询时,结果集很快就会爆炸成难以管理的比例。 – 2013-03-21 22:25:02
不可能与LINQ(到实体)。我听说过的唯一方法是使用SQL公用表表达式(CTE)的存储过程:http://stackoverflow.com/a/11621006/270591 – Slauma 2013-03-21 22:39:34
这将是一次性方法,所以我并不担心关于性能,我只是试图确保我得到一个完整的实体图(就像懒惰加载已启用),现在,我通过手动包含所有可导航属性来实现此功能,但是当模型更改时,我必须去更新我的GetFullEntity方法,这是我试图解决这个问题。 – user1265146 2013-03-22 00:14:56