序列化EF实体;禁用代理创建和延迟加载

本文关键字:代理 创建 延迟加载 EF 实体 序列化 | 更新日期: 2023-09-27 18:13:04

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

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

context.ContextOptions.LazyLoadingEnabled = false;

第一个似乎足以获得一个单维json对象。我应该两者都用吗?它们实际上是做什么的?有没有更聪明的办法?由于

序列化EF实体;禁用代理创建和延迟加载

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

第二行关闭惰性加载。假设你有父实体和子实体。当你请求Parent时,当惰性加载开启时,你不会加载Children。当它关闭时,无论何时加载Parent,你都会加载它的所有子节点。我认为如果你使用EF的话,这是你应该熟悉的。

编辑:如果循环引用有问题,那么你应该关闭延迟加载。那么当你序列化父元素时,你就不会试图序列化对父元素有引用的子元素(创建循环引用)