簡體   English   中英

使用 EF Core - OnModelCreating 定義默認值

[英]Define default values using 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<>。 那里沒有太多魔力,但有些事情只是明確定義而不是隱含定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM