2009-02-03 4 views
2

У меня в настоящее время возникает небольшая проблема. Я использую nhibernate с примерно 40 объектами, сопоставленными с базой данных sql-сервера. однако из-за причин производительности некоторые операции выполняются с помощью хранимой процедуры. У меня есть хранимая процедура, которая принимает 3 параметра. один идентификатор объекта и 2 DateTime.Nhibernate Datetime issues

теперь, когда у меня есть даты, как 10-го Dezember 2008, Nhibernate делает

'10.12.2008 00:00:00.000' 

из него. (German Culture) Но Sql Server 2008 не интерпретирует его правильно, поскольку он меняет день и месяц. Когда я вручную изменить текст DATETIME в

'2008-12-10 00:00:00.000' 

я не сталкивался с этой проблемой при использовании сеанса в «нормальном» способом или при использовании NHibernate.linq. просто при использовании sql-запроса для выполнения хранимой процедуры.

Есть ли способ вручную преодолеть способ, которым NHibernate преобразует объекты DateTime в их текстовое представление?

ответ

1

NHibernate не должен преобразовывать DateTimes в их текстовое представление вообще, IMO - он должен попросить драйвер базы данных передать это DateTime в любой форме, в которой он хочет.

Указывает, что ваша хранимая процедура принимает параметр как DateTimes (или что-то типа SQL) или varchar? Если объявление объявлено как получение DateTime и NHibernate, это значит, что должен просто использовать параметризованный вызов как обычно.

1

Я передаю datetimes с .SetDateTime (имя, datetimeValue) в IQuery, поэтому я думал, что nhibernate должен позаботиться об этом. хранимая процедура ожидает параметры DateTime. Я только что увидел это текстовое представление, когда я повернул show_sql на

+1

Включите профилирование на сервере, чтобы узнать, что на самом деле происходит. Я бы не удивился, если show_sql просто использовал текущую культуру для отображения параметра - это не значит, что текст обязательно наталкивается на этот путь. –

0

Я вижу то же самое с одним DateTime в передаче, передаваемом в хранимую процедуру CLR. Шахта также является множеством параметров. Я тоже пробовал это как строку, и я получаю ошибки независимо от того, что я делаю. Вот код из файла отображения:

" Exec spGetRentRollByDate: @propertyID: @reportDate "

Хранимая процедура сначала ищет в результирующей данности table, и если его там нет, он сбрасывает другую функцию для создания и возвращает этот набор.