如果我在实体框架中全局禁用 ProxyCreation 会有啥后果?

Posted

技术标签:

【中文标题】如果我在实体框架中全局禁用 ProxyCreation 会有啥后果?【英文标题】:What would be the consequences if I disable the ProxyCreation globally in Entity Framework?如果我在实体框架中全局禁用 ProxyCreation 会有什么后果? 【发布时间】:2019-09-10 04:40:29 【问题描述】:

Entity Framework 对其内部的一些东西使用代理类,如this question 中所见,我们必须禁用它,因为它会导致对象的序列化问题。

我的问题是,如果我在项目中全局禁用 ProxyCreation 会有什么后果(以避免序列化问题) ...???

【问题讨论】:

【参考方案1】:

它们主要围绕启用延迟加载,但可以为持久更改提供一些性能改进,但老实说,我会说这是高度情景化来呈现任何引人注目的东西。

我会谨慎对待序列化实体的需要。例如,如果要从控制器/API 返回实体,我建议定义反映消费者为此目的所需数据的 POCO 视图模型或 DTO,而不是序列化实体。造成这种情况的关键原因是,序列化实体可能会暴露比消费者需要的更多数据信息,这也意味着通过网络发送的数据比需要的更多。它还可以代表数据的误导性表示,即未急切加载的集合/引用将是#null,那么这是否意味着它们没有数据,或者只是没有加载?

Autofac 支持 .ProjectTo<T>,它集成到 EF 的 IQueryable 操作中,以简化与使用 .Select 的映射到视图模型。

【讨论】:

以上是关于如果我在实体框架中全局禁用 ProxyCreation 会有啥后果?的主要内容,如果未能解决你的问题,请参考以下文章

实体框架 6:在上下文中禁用跟踪时更新实体

尽管代理被禁用,实体框架会自动设置关系

实体框架禁用加载虚拟成员

当延迟加载禁用时,如何通过实体框架仅将导航属性的特定属性包含到查询中?

我应该使用实体框架 4.1 和 MVC3 启用或禁用动态代理吗?

如何使用 CoreData 为某些操作/实体禁用 NSUndoManager?