2010-05-13 4 views
3

У меня очень простая таблица с столбцом Datetime, и у меня есть это сопоставление в объекте домена.Fluent NHibernate Mapping and Formulas/DatePart

MyDate - это имя столбца datetime в БД.

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)"); 

Это прекрасно работает, но не требуется.

Я видел NHProf генераторную SQL для избранных и вот проблема это генерируя все SQL правильно, но за неделю DATEPART .. это часть SQL генерируется:

.... DATEPART (день, MyDate) ... .... Datepart (месяц, MyDate) ... .... Datepart (год, MyDate) ... .... Datepart (час, MyDate) ... .... Датаpart (минута, MyDate) ... .... Дата части (второй, MyDate) ... .... Датаpart (this_.week, MyDate) ...

где this_ является псевдонимом таблицы, которую использует nhibernate.

поэтому он обрабатывает ключевое слово week для материала datepart как столбец или что-то в этом роде. Чтобы уточнить, нет столбца или свойств, которые называются неделями.

помощь?

веселит

Алессандро

ответ

0

Вы не указать DB вы используете так им предполагая SQL Server. Попробуйте следующий

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

или

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

Эти общепринятые сокращения в неделю.
Подробнее здесь: http://msdn.microsoft.com/en-us/library/aa258265(SQL.80).aspx

1

Предыдущее не отвечает на вопросы. Ввод интервала в кавычках должен работать, например:

Карта (x => x.WeekNo) .Formula (@ "DATEPART (" "неделя" ", дата-время)");

Смежные вопросы