我想为每个实体创建2个表:一个具有原始属性,另一个具有相同的字段以及从抽象类继承的字段。
例如:
实体类(产品):
抽象类:
我期望的结果是:
餐桌产品:
餐桌产品_摘要:
我要避免的是创建一个继承每个实体抽象的类,因为我不会在项目中使用它。我只需要创建具有迁移功能的表,因此,如果将来更新Product并添加新的迁移,则两个表都应进行更改。
我认为我正在寻找这样的东西
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>()
.Map(m => m.ToTable("Products"))
.Map<AbstractClass>(m =>
{
m.MapInheritedProperties();
m.ToTable("Products_Abstract");
});
}
但是此代码用于EF6,我使用的是EF Core,但无法更改它。
先谢谢了。英语不是我的主要语言,希望您能理解。
答案 0 :(得分:0)
要使用两个模型创建表,可以尝试如下操作:
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public DbSet<Product> Product { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
foreach (var property in typeof(Product).GetProperties())
{
builder.Entity<Products_Abstract>()
.Property(property.PropertyType, property.Name);
}
}
}
更新:
public class Abstract
{
public string UpdatedBy { get; set; }
public string UpdatedAt { get; set; }
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
foreach (var property in typeof(Product).GetProperties())
{
builder.Entity<Abstract>()
.ToTable("Products_Abstract")
.Property(property.PropertyType, property.Name);
}
}