Проблемы с Nhibernate Datetime - PullRequest
2 голосов
/ 03 февраля 2009

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

сейчас, когда у меня дата, как 10 декабря 2008 года, Nhibernate делает

'10.12.2008 00:00:00.000' 

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

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

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

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

Ответы [ 3 ]

1 голос
/ 03 февраля 2009

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

1 голос
/ 03 февраля 2009

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

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

0 голосов
/ 26 апреля 2009

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

» exec spGetRentRollByDate: @propertyID: @reportDate «

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...