gpt4 book ai didi

c# - Entity Framework 6 "HasRequired"和 "WithMany"部分工作 - 未按预期工作

转载 作者:太空狗 更新时间:2023-10-30 01:33:14 25 4
gpt4 key购买 nike

所以在疯了 3 小时并在网上到处找之后,我强制自己在这里问。我使用 Entity Framework 已经 5 年多了,我从来没有遇到过我在下面描述的那种问题

我有两个 POCO 类(已编辑):

public class Company
{
public virtual ICollection<BusinessUnit> BusinessUnits { get; protected set; } = new List<BusinessUnit>();

public int Id { get; protected set; }
}

public class BusinessUnit
{
public virtual Company Company { get; protected set; } = new Company();

public int CompanyId { get; protected set; }

public string Description { get; protected set; }
}

在我的“BusinessUnit”配置中,我声明:

        this
.HasRequired(c => c.Company)
.WithMany(c => c.BusinessUnits)
.HasForeignKey(c => c.CompanyId);

以下作品:

  • 通过他们的 DbSets 分别查询 2 个实体
  • 访问我的“BusinessUnit”检索实体上的 N 对 1“公司”导航属性

以下不起作用:

  • 检索到的“Company”实体上的 1 到 N“BusinessUnits”导航属性始终为 NULL,即使使用“Include”进行预先加载也是如此

根据 EF 指南和我的经验,我已经在做的是正确的:

  • 启用了延迟加载(1 导航确实有效)
  • 已启用代理(同上)
  • ICollection 是虚拟的,因此为它启用了延迟加载
  • 映射的“HasRequired”部分有效,我可以访问“BusinessUnit”实体上的“Company”代理

我已经尝试将属性 setter 更改为公共(public),但仍然不起作用/解决了问题

这没有明显的行为不端的理由。我显然遗漏了什么,但我不知道是什么。

Entitfy Framerowk 使用的版本是 .Net 4.6 上的 6.1.3,通过 NuGet 包安装。

最佳答案

问题好像是新的initializers for auto-property引起的C# 6 的特性。

如果您“内联”初始化属性, Entity Framework 会中断一对多关系。

删除初始值设定项,导航属性应该再次工作。

public class Company
{
public virtual ICollection<BusinessUnit> BusinessUnits { get; protected set; }

public int Id { get; protected set; }
}

public class BusinessUnit
{
public virtual Company Company { get; protected set; }

public int CompanyId { get; protected set; }

public string Description { get; protected set; }
}

关于c# - Entity Framework 6 "HasRequired"和 "WithMany"部分工作 - 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34509747/

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