c# - 为什么 EF 返回代理类而不是实际实体?

标签 c# entity-framework

当我想要实际的实体类时,我遇到了 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/

相关文章:

asp.net - 使用 Entity Framework 创建具有多个查询的 MVC ViewModel

entity-framework - EF6 Code First - 使用不匹配的外键配置一对一关系

sql-server - 使 Entity Framework 模型跨越多个数据库

c# - Stream 和 MemoryStream 有什么区别

c# - 解析后十进制不显示组(千)分隔符

c# - 是否可以以编程方式设置启动背景?

C#循环比较

.net - 将IQueryable <IEnumerable <Entity >>转换为IQueryable <Entity>

c# - Entity Framework : difference between Detach and AsNoTracking

c# - FrameworkElement 的 VisualStateManager.GoToState