Ausgabe
Ich habe eine C# Entity Framework-Klasse wie diese:
public class Card
{
public decimal CardNumber { get; set; }
}
In der Datenbank wird dieser Wert etwa so gespeichert:
[card_number] [decimal](38, 2) NULL
Wenn ich dann diesen Code ausführe:
entities.Set<Card>().Add(card);
entities.SaveChanges();
(Es sollte beim Speichern von Änderungen fehlschlagen)
Ich scheine diese Ausnahme zu bekommen:
Der Parameterwert „2509067194275615035776,00“ liegt außerhalb des zulässigen Bereichs.
Ich habe versucht, diesen Wert manuell in SQL Server Management Studio einzufügen, und es schien in Ordnung zu funktionieren …
Wohlgemerkt, dies wurde kürzlich von einem langen in C # und einem bigint
in SQL Server zu einem decimal
in C # und einem decimal
in SQL Server geändert …
Ich habe auch diese Konfigurationsklasse, die ungefähr so aussieht und das C # -Objekt der Datenbank zuordnet …
public class CardConfiguration : TrackedEntityConfiguration<Card>
{
public CardConfiguration()
{
ToTable("Card", "dbo");
Property(c => c.CardNumber)
.HasColumnName("card_number")
.IsRequired();
}
}
Ich weiß nicht, warum ich diese Ausnahme bekomme, da sie nicht größer als der dezimale Maximalwert in SQL Server zu sein scheint ….
Ich bin ein bisschen neu bei Entity Framework, also fehlt mir vielleicht irgendwo eine andere Konfiguration?
Lösung
Sie müssen die Genauigkeit der Dezimalstelle angeben. Zum Beispiel:
Property(c => c.CardNumber).HasColumnName("card_number").HasPrecision(18, 6);
Die Genauigkeit hängt von Ihrer SQL-Spaltendefinition ab. Siehe Dialog Spalteneigenschaften:
Beantwortet von – Bron Davies
Antwort geprüft von – Pedro (FixError Volunteer)