【问题标题】:EF Core: Map Many to Many relationship without navigation propertyEF Core:在没有导航属性的情况下映射多对多关系
【发布时间】:2020-05-06 16:56:44
【问题描述】:

我正在尝试使用 Fluent API 在实体框架核心中创建多对多关系 这是我的第一个模型:

MyCalculationSelector.cs

  public int SortOrder { get; set; }
  public string UserString { get { return Name; } }

  private IList<CalculationType> _calculationTypes;
  public virtual IList<CalculationType> CalculationTypes
    {
       get { return _calculationTypes; }
       set { _calculationTypes = value; }
    }

这是我的第二个模型:

MyCalculationType.cs

 public int SortOrder { get; set; }

 public string UserString
 {
    get { return Name; }
 }

 public int CalculationMethod { get; set; }

我记得 EF 6 可以轻松地从 Fluent API 建立多对多关系:

modelBuilder.Entity<MyCalculationSelector>().HasMany(x => x.MyCalculationTypes).WithMany();

我们可以在 ef core 中实现这样的事情吗?截至今天,Hasmany-Withmany 实现是不可能的

【问题讨论】:

  • EF Core 文档 -> 关系 -> Many-to-many
  • 感谢@IvanStoev 只是关注文档,但是没有导航属性的多对多关系并不多
  • 我建议阅读整个Relationships 部分。比如Single navigation propertyWithout navigation property等有共同话题。
  • 我已经阅读了几次文档,但是与 ef6 相比,ef core 仍然缺乏一些东西,我正在认真考虑迁移到另一种技术

标签: c# entity-framework ef-code-first ef-fluent-api ef-core-3.0


【解决方案1】:

我已遵循文档并提出了这个答案,拜托,比我了解更多的人,如果我错了会纠正我。

我首先创建了我的连接表:

CalculationSelectorCalculationType.cs

public class CalculationSelectorCalculationType
    {
        public int CalculationSelector_Id { get; set; }
        public CalculationSelector CalculationSelector { get; set; }

        public int CalculationType_Id { get; set; }
        public CalculationType CalculationType { get; set; }
    }

CalculationSelector.cs

public CalculationSelector()
   {
      _calculationTypes = new List<CalculationSelectorCalculationType>();
      FontSize = 30;
   }
public int SortOrder { get; set; }
public string UserString { get { return Name; } }

private IList<CalculationSelectorCalculationType> _calculationTypes;
public virtual IList<CalculationSelectorCalculationType> CalculationTypes
    {
       get { return _calculationTypes; }
       set { _calculationTypes = value; }
    }

CalculationType.cs

 public int SortOrder { get; set; }

 public string UserString
 {
    get { return Name; }
 }

 public int CalculationMethod { get; set; }

...最后是我的 DbContext:

modelBuilder.Entity<CalculationSelectorCalculationType>().HasKey(p => new { p.CalculationSelector_Id, p.CalculationType_Id });
modelBuilder.Entity<CalculationSelectorCalculationType>().HasOne(p => p.CalculationSelector).WithMany(x => x.CalculationTypes).HasForeignKey(p => p.CalculationSelector_Id);
modelBuilder.Entity<CalculationSelectorCalculationType>().HasOne(p => p.CalculationType).WithMany().HasForeignKey(p => p.CalculationType_Id);

【讨论】:

    猜你喜欢
    • 2013-05-19
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 1970-01-01
    相关资源
    最近更新 更多