高精度の 10 進数値を使用する必要があります。たとえば、SQL Server 2012では最大 38 桁まで使用できます。
これは、System.Decimal
サポートされている精度 (有効桁数 28 ~ 29 桁) よりも高くなっています。
BigDecimal
必要なコンストラクター (数値の文字列表現など) をサポートする CLR 側でこれを表すために、特定の実装を使用するとします。
decimal
値は、適切な SQL Serverタイプを使用して SQL Server データベースに格納されます。
ORMにNHibernateを使用しています。IUserType
DB表現から表現に変換する実装を作成しようとしていますBigDecimal
。
System.Decimal
私の問題は、データを切り捨てる中間体を使用しないと、これを行う方法がわからないことです。
public virtual object NullSafeGet(IDataReader rs, string[] names, object owner)
{
// ??
object objValue = NHibernateUtil.Decimal.NullSafeGet(rs, names[0]);
//objValue is already a System.Decimal
if (!Convert.IsDBNull(objValue))
{
return new BigDecimal(objValue.ToString());
}
return null;
}
アップデート:
対応する Java では、この正確なユース ケースに対応する特別な Hibernate DbType を確認できます。org.hibernate.type.BigDecimalType
これが基盤となる ADO.NET レイヤーの制限なのかどうか疑問に思い始めています。また、m ユース ケースに適した定義もありません。DbType