当我想要实际的实体类时,我遇到了 Entity Framework 返回代理的问题。第一次运行我的代码时,一切都正常运行(没有代理),但之后的每次迭代中,我的一个 DbSet 总是返回代理而不是实际类型。
我在每次迭代后处理上下文,所以我不明白为什么第一次通过它有效,而之后每次都无效。
我的代码在此行失败。我所有的 POCO 都设置了 Table 属性,但是因为它返回一个代理类,所以没有 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
设置为 false。这将阻止您使用一些 EF 的花哨功能,如延迟加载和我相信更改跟踪。
就您的应用而言,它应该能够像对待代理所代表的类型一样对待代理。您是否遇到了具体问题?
编辑
我们有一些代码需要 POCO 类型而不是代理类型,我们执行以下操作来检测当前类型是否是代理。
if (entityType.BaseType != null && entityType.Namespace == "System.Data.Entity.DynamicProxies")
{
entityType = entityType.BaseType;
}
关于c# - 为什么 EF 返回代理类而不是实际实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9501471/