簡體   English   中英

EF 2.1 Core IEntityTypeConfiguration添加默認值

[英]EF 2.1 Core IEntityTypeConfiguration Add default value

我使用EF Core 2.1來創建數據庫。 我可以設置列的默認值

public class SchoolContext : DbContext
{
    ....
    protected override void OnModelCreating(ModelBuilder modelBuilder) {
        ....
         modelBuilder.Entity<Student>().Property(s => s.LastLoginDateTime).HasDefaultValueSql("SYSUTCDATETIME()");
    }
    ....
}

但是,當我嘗試使用IEntityTypeConfiguration設置默認值時,我得到構建錯誤消息(打印在下面的代碼中)。 我知道HasDefaultValueSql()IEntityTypeConfiguration<>不可用。

我該如何解決這個限制? 順便說一下,我跟隨Scott Sauber在他的'定制EF Core 2.0+實體/表映射與IEntityTypeConfiguration - 2017年9月11日'來創建我的SchoolContext

https://scottsauber.com/2017/09/11/customizing-ef-core-2-0-with-ientitytypeconfiguration/

我的代碼:

public class StudentConfig : IEntityTypeConfiguration<Student>
{
    public void Configure (EntityTypeBuilder<Student> builder)
    {
        ....
        // Error    CS1061  'PropertyBuilder<DateTime>' does
        // not contain a definition for 'HasDefaultValueSql' 
        // and no extension method 'HasDefaultValueSql' 
        // accepting a first argument of Type 'PropertyBuilder<DateTime>' 
        // could be found (are you missing a using directive
        // or an assembly reference?) 
        // Data C:\Users\Paul\source\repos\School\Data\EFClasses
        // \Configurations\StudentConfig.cs 22  Active

        builder.Entity<Student>().Property(s => s.RecIn).HasDefaultValueSql("SYSUTCDATETIME()");
        ....
    }
}

Configure方法的builder參數類型是EntityTypeBuilder<T> ,與ModelBuilder.Entity<T>方法返回的完全相同。

因此,當使用IEntityTypeConfiguration<T> ,您應該直接使用builder (沒有用於ModelBuilder builder Entity<T>()調用):

public class StudentConfig : IEntityTypeConfiguration<Student>
{
    public void Configure(EntityTypeBuilder<Student> builder)
    {
        builder.Property(s => s.LastLoginDateTime).HasDefaultValueSql("SYSUTCDATETIME()");
    }
}

順便說一句, ModelBuilder.Entity<T>()方法有Action<EntityTypeBuilder<T>參數的重載,它可以以類似的方式使用:

modelBuilder.Entity<Student>(builder =>
{
    builder.Property(s => s.LastLoginDateTime).HasDefaultValueSql("SYSUTCDATETIME()");
});

更新:請注意, HasDefaultValueSqlMicrosoft.EntityFrameworkCore.Relational 程序集中RelationalPropertyBuilderExtensions類中定義的擴展方法,因此請確保您的項目引用它。

暫無
暫無

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

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