美好的一天,
我使用Entity Framework将一些预先存在的Business Objects映射到我们的数据库。这些对象最初使用的是本地数据访问方法,但我们现在想要使用Code-First来试用Entity Framework。我的期望是这很简单,但现在我有些疑惑。
我试图只使用属性来完成这个,所以我在这里没有一些映射,其中有一些映射,还有更多的映射....
当我查询实体时,我得到System.Data.Entity.DynamicProxies.MyClass_23A498C7987EFFF2345908623DC45345和类似的对象。这些对象具有来自相关记录的数据以及相关对象(尽管那些也是DynamicProxies)。
这里发生了什么?我的映射出了什么问题?为什么不改回MyBusinessObject.MyClass?
答案 0 :(得分:3)
这与映射无关。您看到的那些类型称为动态代理。 EF在运行时从您映射的每种类型派生类,并使用它而不是您的类型。这些类在overriden属性setter和getter中有一些额外的内部逻辑。延迟加载和附加实体的动态变化跟踪需要逻辑。
可以在上下文实例中关闭此行为:
context.Configuration.ProxyCreationEnabled = false;
执行此操作后,您的导航属性将不会自动加载,您必须在查询中使用预先加载(Include
方法)或显式加载。