2010-11-27 165 views
7

在NHibernate中可以做到這樣的事情嗎?NHibernate:通過SQL查詢獲取對象

Product GetSpecificProduct() 
{ 
    return session.CreateSQLQuery("SELECT * FROM Products WHERE price = 
     $500").UniqueResult<Product>(); 
} 

當我嘗試運行此代碼,我得到:

System.InvalidCastException:無法投類型的對象System.Object的[]'鍵入產品。

或者我必須使用NHibernate查詢語言嗎?

回答

8

如果你必須使用CreateSqlQuery,您可以使用以下命令:

Product GetSpecificProduct() 
{ 
    ISQLQuery query = session.CreateSQLQuery("SELECT * FROM Products WHERE price = $500"); 
    Product p = query.SetResultTransformer(Transformers.AliasToBean<Product>()).UniqueResult<Product>(); 
} 

我建議你最好用的ICriteria爲:

Product GetSpecificProduct() 
{ 
    ICriteria c = session.CreateCriteria(); 
    c.Add(Expression.Eq("Price", 500)); 
    return c.UniqueResult<Product>(); 
} 
4

是的,你可以。檢查出實體的查詢使用本地SQL:http://codewut.de/content/using-native-sql-nhibernate

+0

鏈接不再工作。 「Knol上不再提供此內容。」 – Liedman 2012-05-24 12:48:19

+0

這是另一個。 http://codewut.de/content/using-native-sql-nhibernate 或只是谷歌「使用本機SQL NHibernate的實體查詢」:) – basarat 2012-05-25 15:17:59