2011-10-06 71 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

相关问题