【发布时间】:2013-05-08 11:48:05
【问题描述】:
场景:我想向数据库中添加一个实体,该实体将具有导航属性,而 实体具有导航属性......等等。基本上数据库中的表是相互连接的——所有的表。
我使用 EF4.3 和上下文/请求模式,所以我不想启用延迟加载;加载我需要的实体只会花费太多时间。到目前为止,我了解到除了像这样使用 include 方法之外别无他法:
context.Set<TEntity>().include("navproperty1").include("navproperty1.navproperty1.1")... and so on.
这样可维护性会很差,而且代码很多,但是如果我不想手动为每个实体类型编写所有包含,还有其他方法吗?
【问题讨论】:
-
旁注:navproperty1.navproperty2 也会自动包含 navproperty1。
-
你确定要那个吗?与延迟加载相比,您最终可能会得到更差的性能和非常复杂的 SQL 查询。更不用说这种查询最终可能通过网络传输的数据量了。但是,它可以作为扩展方法完成,使用实体类型上的反射。
-
你是先用code吗?
-
nav property1 就我测试而言不会自动加载 nav property2,但可能是我遗漏了一些东西。 @Jure:是的,我知道它的性能真的很差,但是延迟加载对我来说不是一个选择,因为我不希望启用代理,而延迟加载是必需的,对吧?!我试图包含所有导航属性的原因是,“A”实体“与“B”实体有 1:n 关系,但“B”实体与“C”实体有 n:m 关系。如果我不包括“C”到“A”,然后尝试调用 context.SaveChanges(),那么所有数据都会在“B”和“C”之间丢失。知道我该如何解决吗?
标签: c# entity-framework lazy-loading navigation-properties