我正在尝试使用EntityFramework Core来存储共享同一模型但起源不同的实体。我有一个ProductType
枚举,它指定实体的类型。
public enum ProductType
{
Digital,
Furniture,
Health,
}
public class ProductModel
{
public int Id {get; set;}
public ProductType Type {get;set;}
public decimal Price {get; set;}
public int Stock {get;set;}
}
我正在使用派生的DbContext
与SqlServer Express进行交互:
public class ProductDbContext : DbContext
{
public ProductType ProductType { get; }
public DbSet<ProductModel> Products { get; }
public ProductDbContext( ProductType type )
{
ProductType = type;
}
protected override void OnModelCreating( ModelBuilder modelBuilder )
{
var productEntity = modelBuilder.Entity<ProductModel>()
.ToTable( $"Products-{ProductType}" );
}
}
我希望将每个ProductType
拆分到自己的表中,以便将产品存储在dbo.Products-Digital
,dbo.Products-Furniture
和dbo.Products-Health
中。
以上实现仅适用于单个ProductType
,但是当我尝试为多个表创建表时,我开始遇到问题。运行以下命令(显然)会导致问题,因为它只会为遇到的第一个ProductType
创建一个表,因为在此之后已经创建了数据库:
var types = Enum.GetValues( typeof(ProductType) ).Cast<ProductType>();
foreach( var type in types )
{
var context = new ProductDbContext( type );
context.Database.EnsureCreated();
}
我希望能够随着时间的推移添加新的ProductType
值,并让EFCore自动为每个表创建一个表(如果它们不存在的话)。
因此,如何让EF Core自动确保每个ProductType
都有一个表,包括以后添加的表?
答案 0 :(得分:0)
这是EF Core当前不支持的每个类型的表继承模型的示例,您应该考虑切换到支持并可以通过Fluent API进行配置的每个层次模型的表。
https://docs.microsoft.com/en-us/ef/core/modeling/relational/inheritance