我有一个带有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
答案 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