2014-10-10 12 views

Odpowiedz

39

Okazuje się, że Entity Framework nie obsługuje typów danych unsigned. Dla kolumn uint można po prostu zapisać wartość w podpisanym typie danych z większym zakresem (czyli long). A co z kolumnami ulong? Powszechne rozwiązanie nie może dla mnie działać, ponieważ nie ma podpisanego typu danych podpisanego przez EF, który może pomieścić ulong bez przepełnienia.

Po krótkim zastanowieniu znalazłem proste rozwiązanie tego problemu: po prostu przechowuj dane w obsługiwanym typie long i przesyłaj je do ulong, gdy uzyskasz do nich dostęp. Możliwe, że myślisz: "Ale poczekaj, wartość max długa> długa maksymalna wartość!" Wciąż możesz przechowywać bajty długiego, a następnie odrzucić je z powrotem do ulong, gdy ich potrzebujesz, ponieważ oba mają 8 bajtów. Umożliwi to zapisanie zmiennej ulong w bazie danych poprzez EF.

// Avoid modifying the following directly. 
// Used as a database column only. 
public long __MyVariable { get; set; } 

// Access/modify this variable instead. 
// Tell EF not to map this field to a Db table 
[NotMapped] 
public ulong MyVariable 
{ 
    get 
    { 
     unchecked 
     { 
      return (ulong)__MyVariable; 
     } 
    } 

    set 
    { 
     unchecked 
     { 
      __MyVariable = (long)value; 
     } 
    } 
} 

Odlew jest unchecked zapobiec wyjątków przelewowy.

Mam nadzieję, że to komuś pomaga.

+0

Czy możesz rzucić okiem na http://stackoverflow.com/questions/41802581/entity-framework-code-first-with-mysqlconnector-pks-and-fks-set-as-uint? – NetUser101

+0

Co jeśli próbujesz pracować z liczbami większymi niż długie? –