2016-01-13 9 views
8

Korzystam z Entity Framework 6.1, najpierw kodu. Próbuję zapisać/pobrać dziesiętne z SQL Server, ale poprawna precyzja nie jest pobierane. Czytam z pliku .csv, przetwarzam dane, a następnie wstawiam do DB.EF pobiera niepoprawną dokładność dziesiętną

  • wartość w pliku csv: 1.1390
  • wartość, gdy zapisany jako decimal z importu: 1.1390
  • wartość wstawiona do DB: 1.139
  • Wartość rzeczywistości przechowywana/przedstawiono w SSMS: 1.1390
  • Wartość podczas ręcznego uruchamiania kwerendy SQL Profiler przechwytuje w celu pobrania: 1.1390
  • Wartość pobrana przez EF: 1.1300

Wszystko działa z wyjątkiem pobierania wartości. Próbowałem rozwiązania podanego w każdym innym poście SO (poniżej), ale nie ma ono żadnego efektu. Co tu jest nie tak? Jak mogę odzyskać poprawną wartość z właściwą precyzją?

rzekomej rozwiązanie:

modelBuilder.Entity<ClassA>().Property(p => p.MyDecimal).HasPrecision(19, 4); 

Metoda pobierania, powraca z niewłaściwego typu ClassA precyzją:

_poRepository.Table.FirstOrDefault(p => p.CompNumberA == compNum && 
             p.LineNumber == lineNumber); 

Porównanie pomiędzy tymi dwoma wartościami po przecinku:

import.MyDecimal != dbValue.MyDecimal 

ClassA:

public class ClassA 
{ 
    // properties 
    public virtual decimal MyDecimal { get; set; } 
} 
+0

Jak wyświetla się precyzja "1.1300"? –

+1

Nie powiedziałeś, z jakiej metody EF korzystasz, np. Kod Najpierw nie pokazałeś swojego modelu. Wydaje się mało prawdopodobne, aby ktokolwiek mógł pomóc bez krytycznych informacji. –

+0

@BradleyUffner Moja kontrola różnic w wartości zwracanej z DB i wartości podanej z pliku .csv. Porównanie pokazuje, że są nierówne. Kiedy patrzę na zmienną w punkcie przerwania, Visual Studio pokazuje wartość jako '1.1300'. – vaindil

Odpowiedz

3

Okazuje się, że muszę określić dokładność w ten sam sposób, ale w płynnym odwzorowywaniu dla ClassA. Określenie go w OnModelCreating() nie wykonało tego, ale w płynnym odwzorowaniu zrobiło to. W szczególności:

Property(u => u.MyDecimal).HasPrecision(19, 4);