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

Joh*_*han 5 c# asp.net entity-framework lazy-loading

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

 context.ContextOptions.ProxyCreationEnabled = false;
Run Code Online (Sandbox Code Playgroud)

和/或

context.ContextOptions.LazyLoadingEnabled = false;
Run Code Online (Sandbox Code Playgroud)

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

Pio*_*rak 6

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

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

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

  • 有一个链接.但您必须明确加载相关实体.使用Load方法或Include方法 - http://weblogs.asp.net/dotnetstories/archive/2011/03/10/lazy-loading-eager-loading-explicit-loading-in-entity-framework-4.aspx.如果您发现它有用,您可以提供答案. (2认同)