Лямбда-выражения NHibernate - превращаются ли они в SQL - PullRequest
3 голосов
/ 10 марта 2010

Я немного новичок в NHibernate, и я беру код, написанный другим разработчиком. Я хочу узнать, как NHibernate преобразовывает лямбда-критерии в SQL.

Я знаю, что в Linq to SQL использование лямбда-выражений в запросах означает, что все это превращается в дерево выражений, а затем в SQL (где это возможно) поставщиком Linq to SQL. Это можно увидеть, выполнив DataContext.Log = Console.Out.

Но как насчет выражения критерия NHibernate, где Linq to NHibernate не используется?

Импортируются следующие пространства имен ...

using NHibernate;
using NHibernate.Criterion;
using NHibernate.LambdaExtensions;

.. и код критерия выглядит следующим образом ...

    return Session.CreateCriteria<MyObjectType>()
        .Add<MyObjectType>(x => x.Id == id)
        .UniqueResult<MyObjectType>();

Будет ли это преобразовано в оператор SQL, например

Select distinct * from table where id = [param]

... или весь набор данных будет извлечен в память, давая список, а затем к объектам будут применены лямбда-выражения. например, * 1 016 *

return List<MyObject>.Where(x => x.id = id)  [or something similar].

Я не уверен, обеспечивает ли мой импорт NHibernate.LambdaExtensions своего рода перевод на SQL.

1 Ответ

1 голос
/ 10 марта 2010

Сначала он превращается в оператор HQL (включите ведение журнала и посмотрите операторы на консоли), а затем в SQL и отправляете в базу данных.

Он не выделяет всю таблицу в память и не фильтрует ее.

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