当不同的表共享相同的字段时,如何设计 EF 核心代码优先数据库

How to design EF core code-first database when different tables share the same fields

我正在使用 MS-SQL 数据库开发 ASP .NET Core 5 MVC 应用程序,EF Core 是我的 ORM(采用代码优先方法)。

目前我正在重新设计数据库,我有多个 table 共享很多相同的属性,我希望能够 add/remove 来自不同 table 的属性]s,但只出现在代码中的一处。

因为 .NET 没有多重 class 继承,所以我想到了继承“级别”中的 classes 的想法。 基本上,在下面的示例中,购买 table 和产品 table 应该具有完全相同的价格、日期和内容属性,但还有一些额外的特定字段:

class Purchase : PriceDatesAndContent
{   
      // specific purchase properties
}

class Product : PriceDatesAndContent
{
      // specific product properties
}

class PricesDatesAndContent : PriceAndDates
{
       public string Name { get; set ; }
       public string Description { get; set; }
}

class PricesAndDates : Prices
{
      public DateTime someDate1 { get; set; }
      public DateTime someDate2 { get; set; }
      // ...
 }

class Prices
{
      public double Price1 { get; set; }
      public double Price2 { get; set; } 
}

但是,我不太确定这在我看来是否真的是一个绝妙的主意,我很想听听您的意见,或者您是否有针对这种情况的另一种解决方法?

非常感谢!

However, I'm not really sure that this is really a brilliant idea as it seems to me

只要您的基 类 未映射为实体,拥有深继承层次结构就很好。但是 不寻常 以这种方式为您的 类 建模只是为了节省您自己的打字时间。

使用接口对常见的 属性 模式建模可能会更好,这样您就不必将它们安排在一个层次结构中。例如

public interface IHasName
{
    public string Name { get; set; }
    public string Description { get; set; }
}

public interface IHasPrices
{
    public double Price1 { get; set; }
    public double Price2 { get; set; } 
}