我正在使用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()");
....
}
}
答案 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
类中定义的扩展方法,因此请确保您的项目正在引用它。