EF Core: сопоставление отношений "многие ко многим" без свойства навигации - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь создать отношения «многие ко многим» в Entity Framework Core с помощью 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; }
    }

И это моя вторая model:

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? на сегодняшний день реализация Hasmany-Withmany невозможна

1 Ответ

0 голосов
/ 09 мая 2020

Я следил за документацией и пришел к этому ответу, пожалуйста, кто-нибудь, кто знает больше меня и исправит меня, если я ошибаюсь.

Сначала я создал свою таблицу соединений:

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);
...