2

я получил довольно та же проблема в этом вопросе: How to override SQL Server default value constraint on a boolean when inserting new entity? [closed]Как установить другое значение в булевом значении defaut с ядром Entity Framework?

Подобно ему, я получаю хорошее значение моего булево от клиента к контроллеру, ложной, но она установлена ​​истина по зову _context.SaveChanges(); из-за Entity Framework и ограничение по умолчанию в базе данных.

НО: Я использую Entity Framework Core и у меня нет [DatabaseGenerated(DatabaseGeneratedOption.Computed)] аннотации для устранения проблемы.

В моем ApplicationDbContext.cs:

modelBuilder.Entity<myEntity>(entity => 
{ 
    entity.Property(e => e.Active).HasDefaultValueSql("1"); 
    //entity.Property(e => e.Active).HasDefaultValueSql<bool>("1"); // doesn't fix 
    ... 
} 

В моей базе данных:

CREATE TABLE myEntity(
    Id  INTEGER IDENTITY(1,1) NOT NULL, 
    ... 
    Active BIT NOT NULL CONSTRAINT DF_myEntity_Active DEFAULT 1 
); 

В моем контроллере:

[HttpPost] 
[ValidateAntiForgeryToken] 
public async Task<IActionResult> Create([Bind("Id, Active, etc.")] Entity myEntity) 
{ 
    if (ModelState.IsValid) 
    { 
     _context.Add(myEntity); // here myEntity.Active = false 
     await _context.SaveChangesAsync(); 
     // same problem with _context.SaveChanges(); in another controller 
     // here myEntity.Active = true 
    } 
    ... 
} 

кажется, что EF не отображает C# булева с SQL правильно и всегда принимает значение по умолчанию. У кого-то есть проблема, чтобы заставить ложное значение?

+0

Вы когда-нибудь выяснили, как это исправить? У меня такая же проблема с использованием EF Core, и мне не удалось выяснить, как установить значение, отличное от значения по умолчанию 1 – monica

ответ

0

Наконец, у меня могут быть аннотации данных, сгенерированные в моей модели EF, с использованием опции --data-annotations в команде EF. Поэтому я помещаю [DatabaseGenerated(DatabaseGeneratedOption.None)] в свойство и не использую стандартное отклонение базы данных.

0

Я также столкнулся с почти аналогичной проблемой с нулевым значением bool. Я использовал EF поверх Sqlite db. Для меня значение update true/false не отражалось в db. После того, как я переопределен метод OnModelCreating и настроен свойство, как показано ниже

protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<MyEntity>() 
     .Property(p => p.IsActive).ValueGeneratedNever().HasDefaultValue(null); 
    } 

После этого изменения, как значения были обновлены в соответствии ожидалось. Надеюсь, это тоже поможет вам.