2

Ich habe das ganz gleiche Problem in dieser Frage: How to override SQL Server default value constraint on a boolean when inserting new entity? [closed]Wie wird ein anderer Wert für einen Booleschen Wert mit dem Standardwert default mit Entity Framework Core festgelegt?

Wie er, ich den guten Wert meiner boolean vom Client an den Controller, falsch, aber es ist zu wahren durch den Aufruf von _context.SaveChanges(); eingestellt wegen Entity Framework und die Vorgabewerteinschränkung in der Datenbank.

ABER: Ich benutze Entity Framework Core und ich habe keine [DatabaseGenerated(DatabaseGeneratedOption.Computed)] Annotation zu entfernen, um das Problem zu beheben.

In meinem ApplicationDbContext.cs:

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

In meiner Datenbank:

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

In meinem Controller:

[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 
    } 
    ... 
} 

Es scheint, dass EF nicht C# boolean abbildet mit SQL-Bit korrekt und nimmt immer den Standardwert. Hat jemand ein Problem, um den falschen Wert zu erzwingen?

+0

Haben Sie jemals herausgefunden, wie Sie das beheben können? Ich habe das gleiche Problem mit EF Core und konnte nicht herausfinden, wie Sie einen anderen Wert als den Standardwert 1 festlegen – monica

Antwort

0

Schließlich kann ich Daten Anmerkungen in meinem EF-Modell mit --data-annotations Option im EF-Befehl generiert haben. Also setze ich [DatabaseGenerated(DatabaseGeneratedOption.None)] auf die Eigenschaft und verwende nicht die Standardbeschränkung der Datenbank.

0

Ich habe auch fast ähnliches Problem mit Nullable bool Wert konfrontiert. Ich habe EF auf Sqlite db verwendet. Für mich spiegelte sich der Update-Wert true/false nicht in der db wider. Nachdem ich die OnModelCreating Methode überschrieben und die Eigenschaft konfiguriert, wie unten

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

Danach ändert sich die Werte wie pro erwartet aktualisiert wurden. Hoffe das kann dir auch helfen.

Verwandte Themen