Значение базы данных по умолчанию, используемое при задании явного значения - PullRequest
0 голосов
/ 12 июня 2019

Не уверен, является ли это известной проблемой или нет.Но кажется, что при вставке нового объекта в базу данных, если свойство 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...