将实体属性数据库属性设置为IsRequired()和defaultValue:“(”)“解决方法?

时间:2019-04-05 21:21:25

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

我是EF Core 2的新手,正在尝试创建不为null且默认值为空白的Entity属性。我正在使用流畅的API。最终结果是SqlServer端的默认数据绑定N'('''')'。我可以肯定这是一个错误,但是有一个已知的解决方法吗?

我已经尝试了字符串操作来解决多余的撇号以及一个变量。但是,当我查看迁移脚本时,它是正确的,因此它似乎发生在更新数据库与服务器通信过程之间,并且不受我的控制。

public class EfficacyDBContext : DbContext
{
    public virtual DbSet<Person> Person { get; protected set; }
    public virtual DbSet<PersonType> PersonType { get; protected set; }

    public EfficacyDBContext(DbContextOptions options) : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.ApplyConfiguration(new PersonEntityTypeConfiguration());
        modelBuilder.ApplyConfiguration(new PersonTypeEntityTypeConfiguration());
    }
}
public class PersonEntityTypeConfiguration : IEntityTypeConfiguration<Person>
{
    public void Configure(EntityTypeBuilder<Person> builder)
    {
        builder.ToTable("Person.Person");
        builder.HasKey(x => x.Id);
        builder.Property(x => x.Id).ValueGeneratedOnAdd();
        builder.Property(x => x.FirstName).HasMaxLength(50)
            .HasDefaultValue("('')").IsRequired();
    }
}

在SqlServer端,我希望不输入任何内容时该字段默认为空值。但是,由于数据绑定偏斜,我得到了默认值('')

1 个答案:

答案 0 :(得分:1)

您使用的HasDefaultValue方法不正确。当您传递 SQL片段时,它期望一个 value 。支持后者,但是通过另一种方法-HasDefaultValueSql

所以要么使用

.HasDefaultValue("")

.HasDefaultValueSql("('')")

参考:EF核心文档-Default Values