Entity Framework Code Zuerst meine Dezimalstellen abschneiden

Ich verwende Entity Framework 6.x unter Verwendung des Code First-Ansatzes in einer MVC 5-Anwendung. In dieser speziellen Situation enthält mein Modell (unter anderem) zwei Eigenschaften namens Latitude und Longitude:

[Required, Range(-90, +90)]
public decimal Latitude { get; set; }

[Required, Range(-180, +180)]
public decimal Longitude { get; set; }

Und als ich die Migration durchgeführt habe, habe ich so etwas bekommen

CreateTable("ResProperty"), c => new {
        :
    Latitude = c.Decimal(nullable: false, precision: 10, scale: 8),
    Longitude = c.Decimal(nullable: false, precision: 11, scale: 8),
        :
})
... other stuff

so Breitengrad und Längengrad haben 8Dezima Ziffern. Ersteres mit 2 ganzen Zahlen (max. 90) und Letzteres mit 3 ganzen Zahlen (max. 180).

Nach Ausführen des Befehls Update-Database werden die Spalten meiner Tabelle wie folgt angezeigt:

Latitude decimal(10,8)
Longitude decimal(11,8)

das scheint mir gut zu sein. Jetzt habe ich aus meiner Sicht eine Karte und einen Javascript-Code, mit dem der Benutzer die Markierung neu positionieren kann. Das funktioniert auch gut. Wenn der Marker neu positioniert wird, werden die Felder Latitude und Longitude mit dem aktualisierten Wert gefüllt, der (Javascript) mehr als 12 Dezimalstellen hat. Das macht AFAIK nichts aus, weil meine Skala 8 Dezimalstellen hat.

Nachdem die Schaltfläche "Senden" gedrückt wurde und entweder die Methode "POST erstellen" oder "POST bearbeiten" aufgerufen wurde, überprüfte ich die Modellinstanz und bestätigte, dass die im Modell an den Controller übergebenen tatsächlichen Werte korrekt sind Code Ort). Der Wert ist also korrekt.

Now ... das Problem ist, dass nach der Ausführung von db.SaveChanges () die Datenbank aktualisiert wird - und ich habe bestätigt, dass ein tatsächliches Schreiben / Aktualisieren stattgefunden hat -, aber irgendwie ignoriert der EF intern meine tatsächlichen Werte und schreibt den abgeschnittenen Breitengrad / Längengrad auf NUR ZWEI Dezimalstellen gerundet, daher zeigt mein Latitude in der DB als 09.500000000 an, dass alle anderen Dezimalstellen auf Null gesetzt sind, da anscheinend eine Rundung stattgefunden hat.

// Prior to SaveChanges()
Latitude = 9.08521879
Longitude = -79.51658792
// After SaveChanges()
Latitude = 9.08000000
Longitude = -79.51000000

Warum wird gerundet, wenn ich den richtigen Maßstab und die richtige Genauigkeit angegeben habe und die Spalte auch den richtigen Maßstab und die richtige Genauigkeit aufweist? Warum ändert SaveChanges meine Werte?

Ich habe diesen Beitrag gefunden http: //weiding331.blogspot.com/2014/01/entity-framework-decimal-value.htm) das ist das gleiche Problem, aber ich weiß nicht, wie ich das beheben kann (wenn ja), weil ich bereits mehrere Migrationen und Datenadditionen durchgeführt habe, nachdem die betreffende Tabelle "migriert" wurde.

Zusammenfassen

Der Modelldatentyp ist korrekt (dezimal)Der Datenbankmigrationscode hat die richtige Genauigkeit / Skala (Lat 10/8 Lon 11/8)Die SQL-Datenbankspalten haben die richtige Genauigkeit / Skalierung (Lat 10/8, Long 11/8).Die im Modell übergebenen Werte haben mindestens 8 Dezimalstellen für Breite und Längedas eigentliche Schreiben / Aktualisieren des Wertes erfolgt fehlerfrei in der Datenbank, aber ...Die in der Datenbank für diese beiden Spalten aufgezeichneten Werte werden auf ZWEI Dezimalstellen gekürzt und zeigen die anderen niedrigstwertigen Dezimalstellen als Null (0) an.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage