NHibernate:通过SQL Query获取对象

Mad*_*Seb 8 sql nhibernate

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

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

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

System.InvalidCastException:无法将类型为"System.Object []"的对象强制转换为类型Product.

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

sh_*_*alh 9

如果必须使用CreateSqlQuery,则可以使用以下命令:

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

我建议你最好使用ICriteria,如:

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

  • 实际上SetResultTransformer的东西对我不起作用...我收到一条错误消息说:错误 - NHibernate.PropertyNotFoundException:无法在类产品中找到属性'Manufacturer'的setter ............ ..(这是真的,因为我在类产品中没有属性制造商;该属性称为ManufacturerName; nhibernate xml映射指定ManufacturerName prop.映射到表中的Manufacturer列) (2认同)