2011-10-06 70 views
6

如何將NHibernate類型映射到SQL Server的TIME類型?我使用NH 3.2和地圖代碼。NHibernate和SQL 2008時間數據類型

public class Schedule 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual TimeSpan Time { get; set; } 
} 

這裏是我的映射類

public class ScheduleMapping : ClassMapping<Schedule> 
{ 
    public ScheduleMapping() 
    { 
     Id(x => x.Id, x => x.Generator(Generators.Native)); 
     Property(x => x.Name, x => x.NotNullable(true)); 
     Property(x => x.Time, x => x.NotNullable(true)); 
    } 
} 

現在,當我從這個列上創建數據庫「時間」 BIGINT SQL類型,而不是時間。我已閱讀thisthat文章,但我不清楚如何應用這些解決方案。

===========編輯====================

我創建並插入新的時間表是這樣的:

var newSchedule = new Schedule { 
        Name = "My Schedule", 
        Time = new TimeSpan(DateTime.Now.Hour, DateTime.Now.Minute, 0) 
        }; 
session.SaveOrUpdate(newSchedule); 

當這個數據插入(大約下午7點27分)的時間包含列值「7002億」,這可能是蜱,但最重要的是,當我問DB這些值

var retrievedSchedules = session.QueryOver<Schedule>().List(); 

Time屬性正確設置爲19:27.Origin盟友我希望Time屬性表示Schedule應該運行的時間。儘管此列的SQL Server的數據類型被定義爲BIGINT,並且該值表示爲(最可能)的刻度,但在檢索後它正確轉換爲時間,這正是我想要的。這不再是一個問題,但我會留下這個希望,別人的利益。

回答

3

這一點,在映射應該解決您的問題:

Property(x => x.Time, x => x => { x.NotNullable(true); x.Type<TimeAsTimeSpanType>(); }); 

默認情況下,NH將使用x.Type<TimeSpanType>()作爲NH型爲CLR Time類型......它映射到SQL Server 2008作爲BIGINT 。

看看這裏:http://jameskovacs.com/2011/01/26/datetime-support-in-nhibernate/。它涵蓋了日期&次的不同Clr-> NH-> Db類型映射。

+0

是的,它完全按照您的建議工作。我意識到TimeAsTimeSpanType類型,但無法弄清楚如何在我的映射類中指定它。謝謝! – user981375

相關問題