设置显式值时使用的数据库默认值

时间:2019-06-12 08:14:32

标签: c# entity-framework-core

不确定这是否是已知问题。但是,似乎如果StatusId int属性的显式值为0,则将新实体插入数据库时​​,将忽略此值,而使用数据库默认值1。

我已读过这篇文章,可能是由于忽略了CLR类型的默认值,因此对于int而言,将忽略0值,因此它使用数据库默认值。

更新实体似乎不受影响。

我不想将我的实体属性更改为int吗?因为它总是有价值的。

此问题是否已解决?

我的实体如下:

public class FuelGroup
{
    public int Id { get; set; }

    public string ConcurrencyStamp { get; set; }

    public string Description { get; set; }

    public string ShortDesc { get; set; }

    public int StatusId { get; set; }
}
public enum StatusEnums
{
    Inactive = 0,
    Active = 1,
    Other = 2
}
public class DataContext : DbContext, IDataContext
{
    private const string SQL_NEWID_FUNCTION = "(newid())";

    public DataContext(DbContextOptions<DataContext> options)
        : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<FuelGroup>(ConfigureFuelGroup);
    }

    private void ConfigureFuelGroup(EntityTypeBuilder<FuelGroup> builder)
    {
        builder.Property(p => p.Id)
            .IsRequired()
            .ValueGeneratedOnAdd()
            .UseSqlServerIdentityColumn();

        builder.HasKey(p => p.Id);

        builder.Property(e => e.ConcurrencyStamp)
            .IsRequired()
            .HasDefaultValueSql(SQL_NEWID_FUNCTION);

        builder.Property(p => p.Description)
            .HasMaxLength(FuelGroupValidators.DescriptionMaxLength)
            .IsRequired();

        builder.Property(p => p.ShortDesc)
            .HasMaxLength(FuelGroupValidators.ShortDescMaxLength)
            .IsRequired();

        builder.Property(p => p.StatusId)
            .IsRequired()
            .HasDefaultValue((int)StatusEnums.Active);
    }
}

CREATE TABLE [FuelGroups] (
    [Id]                [int] IDENTITY(1,1) NOT NULL,
    [ConcurrencyStamp]    [nvarchar](max) NOT NULL DEFAULT (NEWID()),
    [Description]        [nvarchar](256) NOT NULL,
    [ShortDesc]            [nvarchar](10) NOT NULL,
    [StatusId]            [int] NOT NULL DEFAULT(1)
)

更多技术细节

EF核心版本:

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.4" />

数据库提供者:

<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.2.4" />

操作系统:

Windows 7

IDE:

Visual Studio 2019 16.1.2

0 个答案:

没有答案