2010-05-11 57 views
1

我有以下方法,此刻它返回整個sql字符串。我將如何執行以下操作。如何從nhibernate調用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; 
     } 

回答

3

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查詢它?

+0

謝謝迪戈,結束了你的建議,並做好了。 – frosty 2010-05-15 12:21:20