У меня проблема с NHibernate, я не могу найти решение для.В моем проекте у меня есть простая сущность (Batch), но всякий раз, когда я пытаюсь выполнить следующий тест, я получаю исключение.Я описал несколько разных способов выполнить похожий запрос, но почти одинаковое исключение для всех (различие в том, какой метод LINQ выполняется).
Первый тест:
[Test]
public void QueryLatestBatch()
{
using (var session = SessionManager.OpenSession())
{
var batch = session.Query<Batch>()
.FirstOrDefault();
Assert.That(batch, Is.Not.Null);
}
}
Исключение:
System.NullReferenceException : Object reference not set to an instance of an object.
at NHibernate.Linq.NhQueryProvider.PrepareQuery(Expression expression, ref IQuery query, ref NhLinqExpression nhQuery)
at NHibernate.Linq.NhQueryProvider.Execute(Expression expression)
at System.Linq.Queryable.FirstOrDefault(IQueryable`1 source)
Второй тест:
[Test]
public void QueryLatestBatch2()
{
using (var session = SessionManager.OpenSession())
{
var batch = session.Query<Batch>()
.OrderBy(x => x.Executed)
.Take(1)
.SingleOrDefault();
Assert.That(batch, Is.Not.Null);
}
}
Исключение:
System.NullReferenceException : Object reference not set to an instance of an object.
at NHibernate.Linq.NhQueryProvider.PrepareQuery(Expression expression, ref IQuery query, ref NhLinqExpression nhQuery)
at NHibernate.Linq.NhQueryProvider.Execute(Expression expression)
at System.Linq.Queryable.SingleOrDefault(IQueryable`1 source)
Однако этот тест проходит (с использованием QueryOver <>):
[Test]
public void QueryOverLatestBatch()
{
using (var session = SessionManager.OpenSession())
{
var batch = session.QueryOver<Batch>()
.OrderBy(x => x.Executed).Asc
.Take(1)
.SingleOrDefault();
Assert.That(batch, Is.Not.Null);
Assert.That(batch.Executed, Is.LessThan(DateTime.Now));
}
}
Использование API QueryOver <> совсем не плохо, но я просто сбит с толку, что API Query <> не работает, что довольно печально, так как Первый() Операция очень лаконична, и нашим разработчикам очень нравится LINQ.
Я действительно надеюсь, что есть решение для этого, так как странно, если эти методы не проходят такой простой тест.
РЕДАКТИРОВАТЬ
Я использую Oracle 11g, мои сопоставления выполнены с помощью FluentNHibernate, зарегистрированного через Castle Windsor с помощью NHibernate Facility.Как я уже писал, странным является то, что запрос отлично работает с API QueryOver <>, но не через LINQ.