0

Ich arbeite zuerst mit Entity Framework-Code. Der Fehler tritt bei dem Versuch auf, einen negativen Dezimalwert in der SQL Server-Datenbank zu speichern. Das Modell, das ich speichern möchte, ist unten aufgeführt.Kann negative Dezimalwerte nicht speichern

public class Material 
{ 
     public Material() 
     { 
      Categories = new List<Category>(); 
     } 

     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public Guid Id { get; set; } 
     [Required] 
     public string Name { get; set; } 
     public string Description { get; set; } 
     [Required] 
     public DateTime Taken { get; set; } 
     public decimal? Latitude { get; set; } 
     public decimal? Longitude { get; set; } 
     public virtual ICollection<Category> Categories { get; set; } 
    } 

Hier Ich versuche, die Präzision des Dezimalsystems (Breite/Länge) in dem Modell Material einzustellen.

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
     modelBuilder.Entity<Material>().Property(x => x.Latitude).HasPrecision(8, 7); 
     modelBuilder.Entity<Material>().Property(x => x.Longitude).HasPrecision(8, 7); 
} 

In der Datenbank der Spalteninformationen wie folgt aussehen:

dbo.Materials.Latitude (decimal(8, 6), null) 

dbo.Materials.Longitude (decimal(8, 6), null) 

Wenn ich versuche, einen negativen Wert zu speichern wie -1m alles funktioniert. Aber sobald ich versuche, einen größeren Wert oder Wert mit Dezimalzahlen wie -123 oder -123.123456 zu speichern, löst der Datenkontext beim Speichern immer eine Ausnahme aus.

Die Ausnahme Ich erhalte, ist dies:

Fehler beim Entitäten speichern, die Fremdschlüssel Eigenschaften nicht für ihre Beziehungen aus. Die EntityEntries-Eigenschaft gibt null zurück, da eine einzelne Entität nicht als Quelle der Ausnahme identifiziert werden kann. Die Behandlung von Ausnahmen während des Speicherns kann vereinfacht werden, indem Sie die Fremdschlüsseleigenschaften in Ihren Entitätstypen angeben. Details finden Sie unter InnerException.

in auf die innere Ausnahme der Suche können wir sehen, dass dies die Ursache des Problems sein könnte:

{ „Parameterwert‚-117,246108‘außer Reichweite ist“}

Wie kann ich dieses Problem lösen?

+0

Können Sie mir den Typ der Datenzelle sagen? – Likurg

+0

Wie sieht das Schema für dieses Feld aus? –

Antwort

2

Soweit ich weiß mit der Erweiterung "HasPrecision (8, 7)", definieren Sie Dezimal so, dass es insgesamt 8 Ziffern hat; mit der rechten Seite mit höchstens 7 Ziffern. Die Dezimalstelle -117.246108 hat 9 Ziffern, versuchen Sie "HasPrecision (9, 7)" zu ändern.

1

Sie verhält sich genau so, wie Sie Ihr Modell konfiguriert haben. HasPrecision(8,7) bedeutet, dass die Gesamtzahl der zulässigen Ziffern auf beiden Seiten des Dezimalpunkts 8 ist und die Gesamtzahl der Ziffern auf der rechten Seite des Dezimalpunkts 7. Sie können also nur eine Ziffer auf der linken Seite des Dezimalpunkts haben. Um '-117.246108' zu speichern, benötigen Sie mindestens die Genauigkeit 9 und die Skalierung 6.

Verwandte Themen