2016-08-29 5 views
1

Wir haben eine Code-First-Datenbank in unserem Projekt, mit einer Dezimalzahl in einem unserer Modelle. Wir setzen die Dezimal-Genauigkeit auf (6, 2), die wir in unserer MySQL-Datenbank-Struktur überprüft haben. Die Sortierung der db ist utf8_unicode_ci.C# Falscher Dezimalwert von EF6 Code-First DB mit MySQL

Wir haben einen Wert von 4.00 aus einer Sicht in die Datenbank gespeichert, die korrekt war. Jetzt, wo wir versuchen, den Wert von der db zurück zu bekommen, anstatt 4.00 oder 4.00m zu bekommen, erhalten wir 400M. Das Komma ist nur gegangen.

Alle Hilfe wird geschätzt.

(Aber bitte nicht vor, mit 100. Dividieren Das hässliche Fixierung ist und du weißt es.)

EDIT Modell:

public class RSU 
{ 
    public int Id { get; set; } 
    public virtual RSUSlot SlotRef { get; set; } 
    public decimal? Length { get; set; } 
} 

INSERT Code:

using(dbCOntext db = new dbCOntext()) 
{ 
    db.Add(new RSU{ Length = 4.00m }); 
    db.SaveChanges(); 
} 

ERHALTEN:

public static CabinetConfig GetCabinet(M4CDbContext db, int id) 
{ 
    return db.CabinetConfig 
     .Include(m => m.RSURef) 
     .Where(m => m.Id == id) 
     .FirstOrDefault(); 
} 
+0

Kann dieses Problem nicht replizieren. Kann uns dein Problem durch eine ** sql fiddle ** zeigen? – 1000111

+0

Geben Sie bitte auch den Code der 'INSERT' und der' SELECT' der 'dezimal' an. – Smartis

+0

Angst, ich kann nicht in einer Geige reproduzieren. Wenn wir 'select * from rsu' in unserer lokalen Datenbank ausführen, erhalten wir eine Liste mit Werten' 4.00'. Es ist ein MVC-Projekt mit EF6 –

Antwort

0

Ich bin nicht sicher, warum dies nicht mit MySQL arbeiten, aber eine Idee wäre:

Verwenden Sie den Fluent API Ansatz und schaffen EntityTypeConfiguration für Ihre Klasse:

public class RSUConfiguration : EntityTypeConfiguration<RSU> 
{ 
    public RSUConfiguration() 
    { 
     Property(x => x.Length) 
      .HasPrecision(6, 2); 
    } 
} 

Und es hinzufügen zu Ihrem modelBuilder:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<RSU>().Property(x => x.Length).HasPrecision(6, 2);  
    modelBuilder.Configurations.Add(new RSUConfiguration()); 

    base.OnModelCreating(modelBuilder); 
} 
+0

Wir haben Ihre Methode verwendet, aber nichts hat sich geändert. Wir haben noch '4.00' in der Datenbank und sehen' 400M' zu unserem Modell zurück. –

+0

Haben Sie die Datenbank neu erstellt, nachdem Sie diesen Ansatz geändert haben? – Smartis

+0

Ja. Wir haben eine Migration ausgeführt. –