如果我在实体框架中全局禁用 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 会有啥后果?的主要内容,如果未能解决你的问题,请参考以下文章
当延迟加载禁用时,如何通过实体框架仅将导航属性的特定属性包含到查询中?