1
3
所有这些都与标记为已加载或未加载的集合有关。 线路
全部加载
它应该会回来
如果你省略这行
集合只有在被加载时才被标记为已加载-
然而,在声明之后
总之,经过你的询问
知道了这一点,很明显现在唯一要做的就是:防止发生延迟加载。 实现这一点的最佳方法是防止EF创建能够延迟加载的实体对象,即
就在下面
|
2
5
这不是黑客。这是一个抽象的漏洞。我们应该准备好使用ORM工具(和任何其他内部DSL)来解决抽象泄漏问题。
之后
没有
这是没办法避免的,否则就全算了
更新:如果您不使用可重用的EF工具,那么最好避免使用延迟加载和手动实体加载。在某种意义上,它们与linq查询-表达式树相反。它们对于实现在“旧”平台上加载引用实体是很重要的(如果不是唯一的)选择,在这些平台上,语言中没有“表达式树”,但在.NET/EF中,完整的查询可以“声明式”编写为表达式树,而无需执行(但有延迟的解释),应该有非常充分的理由返回到“手动”加载。 |
3
1
这被称为 Abstraction Leak
当你打电话给
我建议你读一读 The Law of Leaky Abstractions 为了更好地理解,单脚解释是相当复杂的。 它背后的主要思想是,一切都将按计划工作,但当你试图提供一个底层不可靠层的完整抽象时,会比平常慢,但有时,该层会通过抽象泄漏,你会感觉到抽象不能完全保护你的东西。 编辑以澄清:
打电话
意思是,例如,从上面的答案:
换言之,它是在你召唤的那一刻被懒散地执行的
在
是的,它将数据作为上下文的一部分放入内存,并在同一上下文中读取。 |
Drago · Linq通过比较Id和具有Id的对象列表来查询获取列表 2 年前 |
Niyazi Babayev · 如何在表达式中动态应用表达式? 2 年前 |
Murat Güzel · EF存储库模式错误{'Id'}已被跟踪 2 年前 |
dotnetdevcsharp · 减少基于数据类型获取设置的方法数量 2 年前 |
saravanan049 · 在实体框架中回滚Azure SQL数据库 2 年前 |