Mappatura LINQ to SQL da Money a Double
-
08-06-2019 - |
Domanda
Sto lavorando con LINQ per la prima volta e volevo che la mappatura funzionasse quando ho un tipo money in SQL, ma la proprietà dell'oggetto del mio dominio è di tipo double.Come posso esprimerlo nel file XML o nel codice in modo che la mappatura non generi la solita eccezione "cast non valido"?
Soluzione
Nel file XML DBML, puoi impostare l'attributo Expression di un elemento Column su qualcosa di simile:
<Column Name="Table1.Amount" DbType="smallint" Type="System.Int32"
Expression="CAST(Table1.Amount as int)" />
Altri suggerimenti
Leggermente fuori tema, ma questo è qualcosa che tutti dovrebbero sapere quando lavorano con il tipo Money in SQLServer.
Non vuoi usare un doppio, vuoi usare un decimale.
Un Double è un float lungo e l'aritmetica in virgola mobile non dovrebbe mai essere utilizzata per i calcoli finanziari.
Pensa a questo, le frazioni 1/3, 1/3 e 1/3 equivalgono a 1.Tuttavia, quando espresso come doppio, ovvero:
.3333 + .3333 + .3333 = .9999 diverso da 1.
Potresti pensare che perdere un millesimo di centesimo sia banale, ma non lo è quando lavori con i soldi di qualcun altro.
Utilizzare System.Decimal.
abbastanza sicuro che Money sia mappato su System.Decimal