gpt4 book ai didi

c# - 为什么导航属性有时会返回 null?

转载 作者:行者123 更新时间:2023-11-30 12:44:09 25 4
gpt4 key购买 nike

我有两个模型

public class Indicator
{
public long IndicatorID { get; set; }
public string Name { get; set; }
public int MaxPoint { get; set; }
public string Comment { get; set; }
public DateTime DateChanged { get; set; }
public DateTime DateCreated { get; set; }

public virtual IList<CalculationType> CalculationTypes { get; set; }
}

public class CalculationType
{
public long CalculationTypeID { get; set; }
public string UnitName { get; set; }
public int Point { get; set; }
public DateTime DateCreated { get; set; }
public DateTime DateChanged { get; set; }

public virtual Indicator Indicator { get; set; }
}

我有数据库工厂

public class DatabaseFactory
{
private StankinQuestionnaireEntities dataContext;
public StankinQuestionnaireEntities Get()
{
return dataContext ?? (dataContext = new StankinQuestionnaireEntities());
}
}

和引用 databaseFactory 的属性

protected StankinQuestionnaireEntities DataContext
{
get { return dataContext ?? (dataContext = DatabaseFactory.Get()); }
}

我使用 Autofac 和注册器 DatabaseFactory

builder.RegisterType<DatabaseFactory>().As<IDatabaseFactory>().InstancePerRequest();

在我的存储库中,我尝试通过两种方式从导航属性中获取数据

enter image description here

第一行工作正常(CalculationType 包含一个元素)

enter image description here

但是第二行在属性 CalculationType 上返回 null

enter image description here

为什么?

更新我发现如果删除行“.InstancePerRequest()”,一切正常。但我不适合这个。

UPDATE2 出于某种原因,ef 未创建代理类

最佳答案

您的数据库上下文肯定有不同的 ProxyCreationEnabled 属性值。

如果查看屏幕截图中所选实体的类型,您会发现第一个实体的类型为 System.Data.Entity.DynamicProxies.Indicator_E...,第二个实体的类型为 StankinQuestionnaire.Model.Indicator。

这意味着 ProxyCreationEnabled 对于第一个数据库上下文为真,而对于第二个数据库上下文该属性为假。因此,延迟加载在第二种情况下不起作用。

尝试搜索在您的项目中设置 ProxyCreationEnabled 的位置,可能您有多个位置。

关于c# - 为什么导航属性有时会返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29317111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com