2012-09-17 44 views
4

我有以下查询:EF代码优先 - 获取DynamicProxies而不是对象。为什么?

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

我在做什么错了?

+1

是参考(多个)标记为虚拟? – DarthVader

回答

5

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

如果要删除的代理人,可以从上下文拆卸对象,也可以通过指定DbContext.Configuration.ProxyCreationEnabled假关闭版本共跟踪

+0

作品。谢谢。 – ojek

1

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

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