Ef core fluent api set all column types of interface

余生长醉 提交于 2019-11-29 12:11:04
Ph0en1x

EF core perfectly fine with base classes/inheritance, so just create an base generic class and put common things into it and then inherit your models from those base class like that:

public abstract class BaseModel<TId>
{
    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<Guid>{ ... //model specific stuff }

If for some reason it's deadly important for you to use fluentapi than there is a configuration interface exists called IEntityTypeConfiguration<TModel> and all what you need is again create base configuration and latter inherit specific configurations from it. And after that apply those configurations in your DbContext.OnModelCreating method somewhat like that:

class BaseConfiguration<TBaseModel> : IEntityTypeConfiguration<TBaseModel>
{
    public virtual void Configure(EntityTypeBuilder<TBaseModel> builder)
    {
        builder.Property...
    }
}

class ModelConfiguration : BaseConfiguration<Model>
{
    public override void Configure(EntityTypeBuilder<Model> builder)
    {
         base.Configure(builder)
         ...// model specific stuff
    }
}

class CustomDbContext : DbContext
{
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.ApplyConfiguration(new ModelConfiguration());
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!