NHibernate:通过SQL Query获取对象

时间:2010-11-27 11:58:06

标签: sql nhibernate

是否有可能在NHibernate中做这样的事情?

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

当我尝试运行此代码时,我得到:

  

System.InvalidCastException:无法将类型为“System.Object []”的对象强制转换为“产品”。

或者我必须使用NHibernate查询语言吗?

2 个答案:

答案 0 :(得分: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>();
}

答案 1 :(得分:4)

是的,你可以。使用Native SQL检查实体查询:http://codewut.de/content/using-native-sql-nhibernate