我們有一個自定義類型,大部分對應於System.Int64,用於我們的系統標識符(它爲底層long值提供了一些額外的約束)。對應於Int64的IUserType使用ODP.net
我們也得到了一個IUserType定義爲允許我們這種類型的特性與NHibernate映射,而是針對Oracle數據庫運行的時候,我們遇到什麼,似乎是被稱爲"Int/Decimal Problem"
的相關部分用戶類型(的get/set)在這裏:
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服務器,還是需要創建兩個不同的UserType實現?