как я могу ссылаться на несколько сущностей в одном, в Code First C # - PullRequest
0 голосов
/ 28 мая 2018

У меня есть эти два класса

   public class Category 
   {
    public int Id{ get; set; }
    public string Name { get; set; }
   }

   public class Filter
   {
     public int Id{ get; set; }
     public string Name { get; set; }
   }

И у меня есть другая сущность, подобная этой

public class Menu 
{
    public int Id{ get; set; }
    public string Name { get; set; }
    public MenuType MenuType { get; set; }
}

То, что MenuType является enum Вот так

    public enum MenuType
    {   
      Category = 0,       
      Filter = 1
    }

iХотите узнать в меню класса, как можно сохранить категорию «ИЛИ фильтр», я имею в виду, что меню связано с одной категорией или одним фильтром, теперь как я могу установить эти отношения?и еще одна вещь, возможно, MenuType расширится и добавит некоторые другие menutype и это класс.

1 Ответ

0 голосов
/ 28 мая 2018

Невозможно иметь внешний ключ столбца (FK), который может ссылаться на две таблицы.

Опция будет:

  public class Category
  {
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Menu> Menus { get; set; }
  }

  public class Filter
  {
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Menu> Menus { get; set; }
  }

  public class Menu
  {
    public int Id { get; set; }
    public string Name { get; set; }
    public MenuType MenuType { get; set; }
    public int? CategoryId { get; set; }
    public int? FilterId { get; set; }

    public Category Category { get; set; }
    public Filter Filter { get; set; }
  }

Внутри вашего контекста:

modelBuilder.Entity<Menu>().HasOne(x => x.Category).WithMany(x => x.Menus).HasForeignKey(x => x.CategoryId);
modelBuilder.Entity<Menu>().HasOne(x => x.Filter).WithMany(x => x.Menus).HasForeignKey(x => x.FilterId);

И, основываясь на MenuType, вы используете объект Category или Filter.

...