当您看到类似的对象时:
System.Data.Entity.DynamicProxies.Tag_FF17EDDE6893000F7672649A39962DB0CA591C699DDB73E8C2A56203ED7C7B6D
它是运行时由EF生成的 代理 版本,通常称为POCO对象。
实体框架之所以创建此对象,是因为它跟踪对象的更改时间,因此在调用
.SaveChanges()它时可以优化操作。这样做的缺点是您实际上并未使用定义的特定对象,因此数据合约和框架(Json.net)无法像使用原始POCO对象那样使用它们。
要防止EF返回此对象,您有两种选择(ATM):
首先,尝试在DbContext上关闭Proxy对象的创建。
DbContext.Configuration.ProxyCreationEnabled = false;
这将完全禁用对特定DbContext的每个查询的代理对象的创建。(这不会影响ObjectContext中的 缓存 对象)。
其次,将 Entityframework 5.0+
与AsNoTracking()一起使用 (ProxyCreationEnabled在EF 5.0中仍然可用)
您还应该能够
DbContext.Persons.AsNoTracking().FirstOrDefault();
要么
DbContext.Persons. .Include(i => i.Parents) .AsNoTracking() .FirstOrDefault();
不会 全局 禁用DbContext的代理创建,而是仅在每次查询时将其关闭。(这 确实 会影响ObjectContext中的 缓存
对象,但不会缓存)



