【问题标题】:EF code first - getting DynamicProxies instead of objects. Why?EF 代码优先 - 获取 DynamicProxies 而不是对象。为什么?
【发布时间】:2012-09-10 00:43:10
【问题描述】:

我有以下问题:

using (var forumsDb = new ForumsDb())
{
   forumsDb.Configuration.LazyLoadingEnabled = false;
   var categoryList = forumsDb.Categories.Select(c => c).ToList();
   /***some code here***/
}

现在,categoryList 包含 4 个项目(我在数据库中有 4 个类别),但它们都是 dynamicproxies 类型,而不是(如我所料)Category

我做错了什么?

【问题讨论】:

  • 引用是否标记为虚拟?

标签: c# linq entity-framework ef-code-first


【解决方案1】:

动态代理是围绕您的对象自动创建的包装器,用于处理更改跟踪,以确保在您运行 SaveChanges 时保存正确的对象。

继承自您的对象(在您的情况下为Category)并可用作相应的对象。

【讨论】:

    【解决方案2】:

    你没有做错任何事。 EF 将您的实体包装在版本跟踪代理中,以便它可以检测对您的对象的更改并支持延迟加载。

    如果你想移除代理,你可以从上下文中分离对象,或者你可以通过指定DbContext.Configuration.ProxyCreationEnabled false 来完全关闭版本跟踪

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多