EF 2.1核心IEntityTypeConfiguration添加默认值

时间:2018-08-19 15:55:08

标签: c# entity-framework entity-framework-core

我正在使用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的“使用IEntityTypeConfiguration自定义EF Core 2.0+实体/表映射-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()");
        ....
    }
}

1 个答案:

答案 0 :(得分:3)

builder方法的Configure参数类型为EntityTypeBuilder<T>,与ModelBuilder.Entity<T>方法返回的参数类型完全相同。

因此,在使用IEntityTypeConfiguration<T>时,应直接使用builder(不使用Entity<T>()的{​​{1}}调用):

ModelBuilder

顺便说一句,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()"); }); Microsoft.EntityFrameworkCore.Relational assembly HasDefaultValueSql类中定义的扩展方法,因此请确保您的项目正在引用它。