【问题标题】:how I can reference multiple Entity into one , in Code First c#如何在 Code First c# 中将多个实体引用为一个
【发布时间】:2018-05-28 13:45:47
【问题描述】:

我有这两个课

   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 就是这样的枚举

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

我想知道如何在类菜单中存储类别或过滤器 我的意思是 Menu 与一个 Category 或一个 Filter 相关,现在我该如何建立这种关系? 另一件事是 MenuType 可能会扩展并添加一些其他的 menutype 和那类。

【问题讨论】:

  • 这个可以写例子吗?
  • 有一个基类A 并让CategoryFilter 扩展它。然后在Menu 类中使用A
  • 看看这些链接TPHTPT

标签: c# sql sql-server ef-code-first code-first


【解决方案1】:

不可能有可以引用两个表的列外键 (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 对象。

【讨论】:

  • 当然可以...继承OOP的基础。在实体框架中称为TPHTPT
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 2011-11-29
  • 1970-01-01
相关资源
最近更新 更多