封闭EF实体;禁用代理创建和延迟加载?

时间:2011-11-02 21:39:43

标签: c# asp.net entity-framework lazy-loading

在将EF实体转换为json对象时,我遇到了一些关于循环引用的问题。我找到了一个适合我的解决方案,但我想知道添加

时实际发生了什么
 context.ContextOptions.ProxyCreationEnabled = false;

和/或

context.ContextOptions.LazyLoadingEnabled = false;

第一个似乎足以获得一维的json对象。我应该同时使用吗?他们实际上做了什么?这有更聪明的方法吗?感谢

1 个答案:

答案 0 :(得分:6)

第一行关闭从您的实体类继承的类的运行时生成。这个类在运行时真的使用过。不是你的班级。这个运行时生成的类可能不是Serializable,这就是为什么这一行(关闭代理生成)使序列化工作。

第二行关闭延迟加载。所以假设你有父实体和子实体。当您要求父项时,如果启用了延迟加载,则不会加载子项。当你加载Parent时它关闭,你加载它的所有孩子。我认为如果您使用EF,这是您应该熟悉的事情。

编辑: 如果循环引用有问题,则应关闭延迟加载。然后,当您序列化Parent时,您不会尝试序列化引用Parent的子项(创建循环引用)