当不同的表共享相同的字段时,如何设计 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; }
}
我正在使用 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; }
}