流畅的NHibernate映射和公式/ DatePart

时间:2010-05-13 11:52:07

标签: datetime fluent-nhibernate

我有一个带有Datetime列的非常简单的表,我在我的域对象中有这个映射。

MyDate是数据库中日期时间列的名称。

public virtual int Day { get; set; }
public virtual int Month { get; set; }
public virtual int Year { get; set; }
public virtual int Hour { get; set; }
public virtual int Minutes { get; set; }
public virtual int Seconds { get;set; }
public virtual int WeekNo { get; set; }

Map(x => x.Day).Formula("DATEPART(day, Datetime)");
Map(x => x.Month).Formula("DATEPART(month, Datetime)");
Map(x => x.Year).Formula("DATEPART(year, Datetime)");
Map(x => x.Hour).Formula("DATEPART(hour, Datetime)");
Map(x => x.Minutes).Formula("DATEPART(minute, Datetime)");
Map(x => x.Seconds).Formula("DATEPART(second, Datetime)");
Map(x => x.WeekNo).Formula("DATEPART(week, Datetime)");

这一切都很好....但是周Datepart。

我在NHProf中看到sql生成了一个select,这就是问题所在 它正确生成所有sql但是对于周datepart .. 这是SQL生成的一部分:

.... Datepart(day,MyDate)...... .... Datepart(月,MyDate)...... .... Datepart(年,MyDate)...... .... Datepart(小时,MyDate)...... .... Datepart(分钟,MyDate)...... .... Datepart(第二,MyDate)...... .... Datepart( this_.week ,MyDate)......

其中this_是nhibernate使用的表的别名。

因此它将datepart stuff的week关键字视为列或类似的东西。为了澄清,没有一个名为“周”的列或属性。

一些帮助?

欢呼声

的Alessandro

2 个答案:

答案 0 :(得分:1)

之前没有回答这个问题。将间隔放在引号中应该有效,例如:

地图(x => x.WeekNo).Formula(@“DATEPART(”“week”“,Datetime)”);

答案 1 :(得分:0)

您没有指定您使用的数据库,所以我假设SQL Server。请尝试以下

Map(x => x.WeekNo).Formula("DATEPART(wk, Datetime)");

Map(x => x.WeekNo).Formula("DATEPART(ww, Datetime)");

这些是WEEK的公认缩写 点击此处了解更多信息:http://msdn.microsoft.com/en-us/library/aa258265(SQL.80).aspx