как вызвать строку SQL из Nhibernate - PullRequest
2 голосов
/ 11 мая 2010

У меня есть следующий метод, на данный момент он возвращает всю строку SQL. Как бы я выполнить следующее.

            using (ITransaction transaction = session.BeginTransaction())
            {
                string sql =
                    string.Format(
                        @"DECLARE @Cost money
                        SET @Cost = -1
                        select @Cost = MAX(Cost) from item_costings
                         where Item_ID = {0}
                        and {1} >= Qty1 and {1} <= Qty2
                        RETURN (@Cost)",
                        itemId, quantity);

               string mystring = session
                    .CreateSQLQuery(sql)
                    .ToString();

                transaction.Commit();
                return mystring;
            }

// РЕДАКТИРОВАТЬ

вот окончательная версия с использованием критериев

 using (ISession session = NHibernateHelper.OpenSession())
        {
           decimal cost = session
                .CreateCriteria(typeof (ItemCosting))
                .SetProjection(Projections.Max("Cost"))
                .Add(Restrictions.Eq("ItemId", itemId))
                .Add(Restrictions.Le("Qty1", quantity))
                .Add(Restrictions.Ge("Qty2", quantity))
                .UniqueResult<decimal>();
            return cost;
        }

1 Ответ

4 голосов
/ 11 мая 2010

NHibernate поддерживает только чтение результатов чтения данных.

Вы должны создать строку запроса как:

string sql = string.Format(
                    @"select MAX(Cost) from item_costings
                      where Item_ID = {0}
                      and {1} >= Qty1 and {1} <= Qty2",
                      itemId, quantity);

И затем вы выполняете это с:

string mystring = session
    .CreateSQLQuery(sql)
    .UniqueResult<decimal>()
    .ToString();

В любом случае, вы здесь вообще не используете функциональность NHibernate, вы просто излишне оборачиваете необработанный ADO.NET.

Почему бы не определить объектную модель и не запросить ее с помощью Criteria, HQL или Linq?

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