Свободная проблема NHibernate, запрашивающая свойство DateTime - PullRequest
2 голосов
/ 29 июня 2011

Я пытаюсь получить строку, используя предложение where для DateTime.

Примечание: Query - это расширение IQueryable из ISession.Query.

var results = Query
   .Where(row => row.TimeStampUtc == timeStampUtc);

Это не возвращает никаких результатов.

var results = Query.ToList()
    .Where(row => row.TimeStampUtc == timeStampUtc);

Возвращает результаты. (С помощью ToList () я избегаю поставщика запросов NHibernate).

Какой трюк мне не хватает?

Обновление:

Профилировщик SQL сообщает, что запрашивает

where row.TimeStampUtc = '2011-01-28T09:28:55.00' /* @p0 */

но фактическое значение столбца '2011-01-28 09:28:55.987', следовательно, совпадений нет.

Где-то во время картирования (предположительно, чтения) я теряю данные за доли секунды.

1 Ответ

0 голосов
/ 29 июня 2011

Проблема была вызвана тем фактом, что столбец использовался как часть CompositeId.

. Я не мог использовать CustomType только для одного столбца, поскольку он игнорируется, если столбец также определен какчасть CompositeId.

Решением является использование метода Type в определении KeyProperty.

  mapping.CompositeId()
                .KeyProperty(x => x.Name)
                .KeyProperty(x => x.TimeStampUtc, k => k.Type("DateTime2"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...