Ef core fluent api设置所有列类型的接口

不幸的是,ef核心不支持TPC模式,但我们需要这种行为。 我写了一个名为IBase的接口,每个实体都实现了这个接口:

public interface IBase { Guid Id { get; set; } [Column(TypeName = "datetime2")] DateTime CreateDate { get; set; } [Required] [StringLength(255)] string CreateUser { get; set; } bool Deleted { get; set; } } 

我想摆脱Annotations以使用Fluent API配置。 但是我有大约20个不同的实体和7个Base-Values,我不想一遍又一遍地做出相同的配置:

  modelBuilder.Entity() .Property(e => e.CreateDate) .HasColumnType("datetime2(2)") .IsRequired(); 

任何想法如何为实施IBase的所有实体配置一次Base-Property?

EF核心完全没有基类/inheritance,所以只需创建一个基类generics类并将常用内容放入其中,然后从这些基类inheritance您的模型:

 public abstract class BaseModel { TId Id { get; set; } [Column(TypeName = "datetime2")] DateTime CreateDate { get; set; } [Required] [StringLength(255)] string CreateUser { get; set; } bool Deleted { get; set; } } class Model : BaseModel{ ... //model specific stuff } 

如果出于某种原因,使用fluentapi对于使用名为IEntityTypeConfiguration的配置接口来说IEntityTypeConfiguration而您需要的只是创建基本配置,后者从中inheritance特定配置。 之后,在DbContext.OnModelCreating方法中应用这些配置,就像这样:

 class BaseConfiguration : IEntityTypeConfiguration { public virtual void Configure(EntityTypeBuilder builder) { builder.Property... } } class ModelConfiguration : BaseConfiguration { public override void Configure(EntityTypeBuilder builder) { base.Configure(builder) ...// model specific stuff } } class CustomDbContext : DbContext { protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.ApplyConfiguration(new ModelConfiguration()); } }