Это минорный релиз, но кроме исправления багов и недочетов мы приготовили немного вкусного. В основном этот релиз был направлен на улучшение Linq провайдера:
- Была улучшена поддержка WCF DataServices
- Linq поддерживает отображение большего числа стандартных методов .NET в функции и процедуры нижележащей базы данных. К примеру, методы
Sin
,Cos
и другие тригонометрические функции из классаSystem.Math
. - С этого релиза Linq to NHibernate, наконец-то, ограниченно* поддерживает проекции с коллекциями:
var emplyee = ( from emoloyee in db.Employees select new { EmployeeId = employee.EmployeeId, OrderIDs = employee.Orders.Select(o => o.OrderId) } ).ToArray();
* На данный момент в подзапросы нельзя добавлять дополнительные критерии.
ПРЕДОСТЕРЕЖЕНИЕ:
В версиях до 3.3.3.CR1 обработка метода
Take()
содержала логическую ошибку: было не важно, в каком месте запроса находился вызов данного метода — он всегда обрабатывался так, как будто вызов метода был расположен в конце. В версии 3.3.3 это поведение было исправлено — теперьTake()
обрабатывается корректно в соответсвии с его семантикой. Таким образом следующие запосы могут выдавать разные результаты.session.Query<Foo>.OrderBy(...).Take(5).Where(...);
session.Query<Foo>.Where(...).OrderBy(...).Take(5);
В версии 3.3.3 и выше первый запрос будет генерировать подзапрос, который будет применять ограничение на количество строк перед условием where.
Полный список изменений можно посмотреть тут.
Сообщать о найденых багах вы можете в JIRA. Исходный код доступен на GitHub.
ссылка на оригинал статьи http://habrahabr.ru/post/173137/
Добавить комментарий