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