当我想要实际的实体类时,我在实体框架返回代理时遇到问题。我第一次运行代码时,一切都运行正常(没有代理),但之后的每次迭代,我的一个 DbSet 总是返回代理而不是实际类型。
我在每次迭代后都会处理上下文,所以我不明白为什么第一次它有效,而之后每次都无效。
我的代码在这一行失败。我的所有 POCO 都设置了 Table 属性,但因为它返回代理类,所以没有表属性。
TableAttribute attrib = (TableAttribute)attributes.Single();
在销毁对象后,DbContext 中是否存在一些幕后静态魔法?
我使用以下命令将对象移动到内存中
MajorClasses = ctx.MajorClasses.ToArray();
我也尝试过
MajorClasses = ctx.MajorClasses.AsNoTracking().ToArray();
在我的 OnModelCreating 中我有以下设置
base.Configuration.ProxyCreationEnabled = false;
base.Configuration.LazyLoadingEnabled = false;
您可以设置ObjectContext.ContextOptions.ProxyCreationEnabled
为假。这将阻止您使用 EF 的一些奇特功能,例如延迟加载和更改跟踪。
就您的应用程序而言,它应该能够像对待它们所代表的类型一样对待代理。您有什么具体问题吗?
Edit
我们有一些代码需要 POCO 类型而不是代理类型,我们执行以下操作来检测当前类型是否是代理。
if (entityType.BaseType != null && entityType.Namespace == "System.Data.Entity.DynamicProxies")
{
entityType = entityType.BaseType;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)