Friday, September 12, 2008

NHibernate 2.o и Linq.

Недавно вышел релиз NHibernate 2.0 (сейчас ожидается sp1). К сожалению, в данной версии отсутствует официальная поддержка Linq. На данный момент существует экспериментальная реализация Linq for NHibernate. Инициирована она была одним из разработчиков NHibernate Oren Eini и находилась в его репозитории, потом была перенесена в репозиторий NHibernate Contrib. Реализация основана на NHibernate 2.0 Beta2 (Daniel Guenter реализовал патч, позволяющий работать ей не с бета-версий, а с релизом), имеет достаточное количество недоработок и дефектов, поэтому использовать ее в реальных проектах пока не рекомендуется. Допустим, этот простой запрос не будет работать:

[Category("JOIN")]
[Test]
[Description("This sample uses foreign key navigation in the " +
"from clause to select all orders for customers. Not actual.")]
public void DLinqJoin1c()
{
var q =
from c in db.Customers
from o in c.Orders.Cast<Order>()
where o.OrderID=100
select c;

var list = q.ToList();

ObjectDumper.Write(q);
}

Так же, в этих же тестах очень много [Ignore("TODO")].

Полную же поддержку Linq for NHibernate, разработчики обещают в NHibernate 2.1. Сейчас разработка Linq for NHibernate перенесена в репозиторий(trunk) NHibernate, поскольку полная реализация требует незначительных изменений последнего. Из моей переписки с одиним из разработчиков Linq for NHibernate я выяснил, что теперь избран путь генерации SQL при обработке выражений(expression tree), вместо использования Criteria API(как это делается в экспериментальной реализации). Будем следить за изменениями и ждать выхода версии 2.1.

No comments:

Post a Comment