以下是我的存储过程:
CREATE PROCEDURE [dbo].[GetProducts_SP]
AS
BEGIN
SELECT * FROM Products
END
这是我的代码:
// This code works
IList<ProductsEntity> list = session.QueryOver<ProductsEntity>().List<ProductsEntity>();
// This also works; I get expected data in `object`
string sql = null;
sql = "EXEC GetProducts_SP";
IQuery query = session.CreateSQLQuery(sql);
IList<object> listSP = query.List<object>();
As
session.QueryOver
工作正常,实体定义或映射没有问题。这就是为什么,我没有发布表定义、实体类和映射。
如上面的代码所示,我正确地获取了数据
List<object>
从存储过程中。
此外,我想转换这个
object
数据到实体。
为此,我使用以下代码:
//Following fail
IList<ProductsEntity> listSPEntity = query
.List<ProductsEntity>();
此操作失败,但有一个例外:
系统。ArgumentException:值“System.Object[]”不是“Products Entity”类型,不能在此泛型集合中使用。
这似乎很明显,因为NHibernate本身无法转化
对象
到实体。
所以我用transformer来指导NHibernate如何用下面的代码做到这一点:
// This fails
IList<ProductsEntity> listSPEntity = query
.SetResultTransformer(Transformers.DistinctRootEntity)
.List<ProductsEntity>();
此操作失败,但有一个例外:
系统。ArgumentException:值“True”不是“Products Entity”类型,不能在此泛型集合中使用。
如何转换a
列表<对象>
由存储过程返回给
List<Entity>
使用
IQuery
?