首先是EF代码 - 获取DynamicProxies而不是对象。为什么?

时间:2012-09-17 18:48:08

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

我有以下查询:

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。< / p>

我做错了什么?

2 个答案:

答案 0 :(得分:5)

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

如果要删除代理,可以从上下文中分离对象,也可以通过指定DbContext.Configuration.ProxyCreationEnabled false

完全关闭版本跟踪

答案 1 :(得分:1)

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

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