ABP框架是一个基于DDD的应用框架,支持多种继承策略,其中一种为层次表继承(Table Per Hierarchy)。层次表继承指将一个类分解成不同的子类并存储到同一个表中,通常使用一个“discriminator”列指示每个子类的类型。以下是使用层次表继承在ABP中定义实体的示例代码:
首先定义一个抽象的基类:
public abstract class Book : FullAuditedEntity
{
public string Title { get; set; }
}
然后定义子类并使用“discriminator”列指定子类的类型:
public class FictionBook : Book
{
public string Author { get; set; }
[Column("Discriminator")]
public override string Type { get; set; } = "Fiction";
}
public class NonFictionBook : Book
{
public string Publisher { get; set; }
[Column("Discriminator")]
public override string Type { get; set; } = "NonFiction";
}
在数据库中,将这些子类存储到同一个表中:
public override void Initialize()
{
IocManager.RegisterAssemblyByConvention(typeof(MyProjectEntityFrameworkCoreModule).GetAssembly());
Configuration.Modules.AbpEfCore().AddEntity();
Configuration.Modules.AbpEfCore().AddEntity();
Configuration.Modules.AbpEfCore().AddEntity();
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity(b =>
{
b.HasDiscriminator("Discriminator")
.HasValue("Fiction")
.HasValue("NonFiction");
});
}
这样定义实体类后,可以像使用普通实体类一样使用子类:
public class MyBookAppService : CrudAppService
下一篇:abp后台作业管理器和负载均衡