システム識別子に使用されるSystem.Int64にほぼ対応するカスタムタイプがあります(基本的なlong値の可能性に関するいくつかの追加の制約があります)。OCP.netを使用したInt64に対応するIUserType
またIUserTypeは、私たちはNHibernateので、このタイプのプロパティをマップするが、Oracleデータベースに対して実行しているときに我々は"Int/Decimal Problem"
として知られている関連部分のようです何に実行できるように定義されたんですユーザータイプ(/セットを取得)はここにある:
public object NullSafeGet(IDataReader rs, string[] names, object owner) {
var longValue = Convert.ToInt64(NHibernateUtil.Int64.NullSafeGet(rs, names[0]));
return new Identifier(longValue);
}
public void NullSafeSet(IDbCommand cmd, object value, int index) {
if (value == null || ((Identifier)value).IsNew) {
NHibernateUtil.Int64.NullSafeSet(cmd, null, index);
return;
}
NHibernateUtil.Int64.NullSafeSet(cmd, ((Identifier)value).Value, index);
}
識別子プロパティが含まれている何かを保存しようとしたときに我々は現在、ISessionのするsaveOrUpdateメソッドから無効なキャスト例外を取得しています。
oracleとSQLサーバーの両方で動作するようにこの問題を処理する方法はありますか、あるいは2つの異なるUserType実装を作成する必要がありますか?