我正在使用oracle舊數據庫。
所有日期均以十進制字段保存,格式如下YYYYMMDD。
有沒有辦法在日期時間(c#)中轉換這種類型,也許在映射文件中?如何使用Nhibernate將oracle小數日期映射到datetime屬性中
0
A
回答
1
只需編寫一個自定義IEnhancedUserType
即可轉換爲字符串表示形式或從字符串表示形式轉換而來。
這樣它將對您的應用程序透明。
0
最近我面臨着同樣的問題,結束了寫下面的方法:
public static DateTime? ConvertFromOracleDate(object oracleDate)
{
if (oracleDate == null)
throw new ArgumentNullException("oracleDate");
if (!(oracleDate is string))
throw new ArgumentException("oracleDate");
var sDate = (string) oracleDate;
if (sDate.Equals(String.Empty))
return null;
if (sDate.Length != 8)
throw new ArgumentOutOfRangeException("oracleDate");
sDate = sDate.Insert(6, "/");
sDate = sDate.Insert(4, "/");
var ci = new CultureInfo("en-US");
return Convert.ToDateTime(sDate, ci);
}
希望這有助於。
-1
您也可以使用
TO_DATE(TO_CHAR(semi_date_field),'yyyymmdd'))
然後你會選擇用Oracle的數據類型DATE列做您的SQL查詢的轉變。 C#無疑將這些視爲日期時間。
Regards,
Rob。
0
完成編寫自定義IUserType。
對於這裏感興趣的是代碼。我還沒有嘗試寫入過程,導致我的表是隻讀在這一刻:
public class DecimalToDateUserType : IUserType
{
public object NullSafeGet(IDataReader rs, string[] names, object owner)
{
int? result = (int)NHibernateUtil.Int32.NullSafeGet(rs, names[0]);
if ((result != null)&&(result.Value>0))
{
var sDate = result.Value.ToString();
sDate = sDate.Insert(6, "/").Insert(4, "/");
var ci = new CultureInfo("en-US");
return Convert.ToDateTime(sDate, ci);
}
return (DateTime.MinValue);
}
public void NullSafeSet(IDbCommand cmd, object value, int index)
{
if (value == null)
{
NHibernateUtil.Int32.NullSafeSet(cmd, null, index);
return;
}
if ((DateTime)value == DateTime.MinValue)
{
value = 0;
NHibernateUtil.Int32.NullSafeSet(cmd, value, index);
return;
}
int convertedValue = 0;
int.TryParse(((DateTime)value).ToString("yyyyMMdd"), out convertedValue);
value = convertedValue;
NHibernateUtil.Int32.NullSafeSet(cmd, value, index);
}
public object DeepCopy(object value)
{
if (value == null) return null;
return (value);
}
public object Replace(object original, object target, object owner)
{
return original;
}
public object Assemble(object cached, object owner)
{
return DeepCopy(cached);
}
public object Disassemble(object value)
{
return DeepCopy(value);
}
public SqlType[] SqlTypes
{
get
{
SqlType[] types = new SqlType[1];
types[0] = new SqlType(DbType.Decimal);
return types;
}
}
public Type ReturnedType
{
get { return typeof(DateTime); }
}
public bool IsMutable
{
get { return false; }
}
public new bool Equals(object x, object y)
{
if (x == null || y == null) return false;
return x.Equals(y);
}
public int GetHashCode(object x)
{
return x.GetHashCode();
}
}
相關問題
- 1. 使用Nhibernate將Oracle日期映射到日期時間3.2
- 2. 如何使用NHibernate映射SampleCount屬性
- 3. 如何使用NHibernate將派生屬性映射到基類上?
- 4. 屬性映射到NHibernate的
- 5. 如何使用NHibernate(Fluent)將DateTime屬性映射到數據庫中的2個varchar列?
- 6. 如何使用Knockout映射將一個屬性映射到另一個屬性?
- 7. 如何在NHibernate映射類中查找未映射的屬性?
- 8. 使用NHibernate將屬性映射到另一個表
- 9. NHibernate的,如何將屬性映射到一個子查詢
- 10. NHibernate的映射屬性在
- 11. NHibernate映射屬性+春天
- 12. NHibernate屬性映射列表
- 13. 使用Hibernate將Oracle日期映射到Java對象
- 14. 如何使用映射屬性在NHibernate中創建一對一的映射
- 15. 如何在NHibernate中使用公式映射屬性?
- 16. 如何將sql日期映射到LocalDate
- 17. 如何使用AutoMapper將數組映射到多個屬性?
- 18. 如何將Oracle DateTime轉換爲日期
- 19. 如何使用NHibernate將XML類型列映射到強類型對象屬性?
- 20. 如何將LINQ EntitySet映射到屬性setter中的List屬性?
- 21. NHibernate將一個屬性映射到另一個表中的列
- 22. 將類的屬性映射到nHibernate中另一個表的列?
- 23. JPA:使用count直接將集合大小映射到屬性?
- 24. 如何處理尚未映射到NHibernate的其他域類的屬性映射?
- 25. 如何使用Fluent nHibernate將UInt64字段映射到小數(20,0)列?
- 26. 將DateTime屬性映射到時間戳記mysq + fluentnhibernate
- 27. 實體框架:將varchar映射到DateTime屬性
- 28. NHibernate映射到使用公共屬性的實體
- 29. 使用AutoMapper的問題將DAL屬性映射到BLL屬性
- 30. 如何將單個日期時間列映射到模型中的兩個獨立日期時間屬性
感謝迭戈,它似乎我在找什麼。我會試着弄清楚它是如何工作的。 – LeftyX 2011-03-06 10:44:30
我沒有使用過你的解決方案,因爲我已經看到從IUserType派生出來的IEnhancedUserType,這個很簡單。我已經嘗試過實現,並且它可以工作,即使我沒有能夠以書寫模式進行測試。我會接受你的解決方案。 – LeftyX 2011-03-07 14:32:10
@LeftyX:是的,實際上IUserType對於大多數情況已經足夠了。 – 2011-03-07 14:39:02