调试实体框架 DBContext API 映射

Posted

技术标签:

【中文标题】调试实体框架 DBContext API 映射【英文标题】:Debugging Entity Framework DBContext API Mappings 【发布时间】:2011-10-28 18:34:22 【问题描述】:

我正在使用实体框架将一些预先存在的业务对象映射到我们的数据库。这些对象最初使用的是本土数据访问方法,但我们想在其上试用 Entity Framework,因为它使用的是 Code-First。我期望这会相当简单,但现在我有一些疑问。

我正在尝试仅使用属性来完成此操作,因此我这里没有一些映射,那里没有一些映射,那里还有更多......

当我查询实体时,我得到 System.Data.Entity.DynamicProxies.MyClass_23A498C7987EFFF2345908623DC45345 和类似的对象。这些对象具有来自相关记录的数据以及相关对象(尽管这些也是 DynamicProxies)。

这里发生了什么?我的映射有问题吗?为什么它不带回 MyBusinessObject.MyClass 呢?

【问题讨论】:

【参考方案1】:

这与映射无关。您看到的那些类型称为动态代理。 EF 在运行时从您映射的每个类型派生类,并使用它而不是您的类型。这些类在重写的属性 setter 和 getter 中有一些额外的内部逻辑。延迟加载和附加实体的动态更改跟踪需要该逻辑。

可以在上下文实例中关闭此行为:

context.Configuration.ProxyCreationEnabled = false;

执行此操作后,您的导航属性将不会自动加载,您必须使用即时加载(查询中的Include 方法)或显式加载。

【讨论】:

好的,所以这是没有关闭它的预期行为。我的下一个问题是,如何让 WPF 之类的东西识别对象类型?我为 MyClass 设置了 DataTemplates,而不是动态代理。而且我想使用延迟加载...我开始认为最好放弃我们原来的业务类并通过 EF 向导重新创建它们并从那里进行自定义.. MyClass 是该动态类的父类。 WPF 有问题吗? 双拍!!!显然不是。我本可以发誓,以前我曾尝试过此操作,但尚未应用 DataTemplate。好吧,那就无视吧。有时我认为这些电脑适合我。

以上是关于调试实体框架 DBContext API 映射的主要内容,如果未能解决你的问题,请参考以下文章

实体框架 + Web API,在 DbContext 之外返回实体(复杂、集合等)

实体框架数据集映射

实体框架 DbContext 执行的日志查询

具有多个 MySql 模式的实体框架多个 DbContext

EFEF框架 Code First Fluent API

应用程序中断访问 dbcontext、Asp .net 核心 web api 2.0 与实体框架核心 2.0 数据库第一种方法