使用EF Core定义默认值 - OnModelCreating

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用EF Core定义默认值 - OnModelCreating相关的知识,希望对你有一定的参考价值。

我开始从Asp.net MVC迁移到Asp.Net MVC Core,我意识到有些事情与我的预期有点不同。我想知道如何设置一些像我以前在EF 6中所做的那样的功能

        protected override void OnModelCreating(DbModelBuilder modelBuilder) 
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();                                                  
            modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

           modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();


        modelBuilder.Properties<string>().Configure(p => p.HasColumnType("varchar"));
        modelBuilder.Properties<string>().Configure(p => p.HasMaxLength(100));
        modelBuilder.Properties().Where(x => x.Name == "Active").Configure(x => x.HasColumnType("char").HasMaxLength(1).IsRequired());
        modelBuilder.Properties().Where(x => x.Name == "Excluded").Configure(x => x.HasColumnType("char").HasMaxLength(1).IsRequired());
        modelBuilder.Properties().Where(x => x.Name == "RegisterDate").Configure(x => x.IsRequired());
        modelBuilder.Properties().Where(x => x.Name == "ChangeDate").Configure(x => x.IsRequired());


        ...
        } 

我似乎无法使用EF Core做到这一点

 protected override void OnModelCreating(ModelBuilder builder)
 {

 }

有谁知道我怎么能这样做?

答案

它无法正常工作,因为您必须先为您的实体调用此行

var entityBuilder = modelBuilder.Entity<SomeEntity>();

然后执行以下操作:

entityBuilder.Property(someEntity => someEntity.SomeProperty)
             .HasColumnType("char")
             .HasMaxLength(10)
             .IsRequired();

另外看看IEntityTypeConfiguration<>它会帮助你保持你的DbContext干净。在你的DbContext OnModelCreating方法中,你只需要调用

modelBuilder.ApplyConfiguration(new SomeEntityConfiguration());

在此基础上,您还可以为公共属性定义基类,并为公共属性创建基本IEntityTypeConfiguration <>。那里没什么神奇的东西,但有些东西只是更明确地定义而非隐含。

以上是关于使用EF Core定义默认值 - OnModelCreating的主要内容,如果未能解决你的问题,请参考以下文章

EF Core1.0 CodeFirst为Modell设置默认值!

Abp vNext 自定义 Ef Core 仓储引发异常

在 EntityFramework Code First 迁移中覆盖“dbo”模式名称

EF CORE中复杂类型的映射

EF CORE中复杂类型的映射

EF 6 Codefirst - 使用流式 API 为基类中定义的属性设置默认值