我试图完成与此SO Question中描述的相同的事情。但是,回复中提到的解决方案并不能解决我的问题。
向我公开的API使用以下内容,例如缩短为ex purpsoes
IList results = CurrentSession.CreateSQLQuery("exec myStoredProc ...")
.SetParameters("..", ...)
.SetResultTransformer(new NHibernate.Transform.AliasToEntityMapResultTransformer())
.List();
然而,我需要将它作为T类型的特定对象,它是一个自定义对象。我尝试将其改为使用NHibernate List T(),但也没有运气。
如果我试图强制转换,我通常会看到一条错误消息,指出无法处理类型' System.Collections.Hashtable'输入' ...'
是否有人遇到类似的问题,并知道如何将其转换/转换为与System.Collections.Hashtable不同的类型。我的主要目标是我需要使用LINQ语句来查询结果,而不能使用他编码返回的IList。
我试图按原样使用API而不是更改,因为这已经在消费应用的其他地方使用过了。因此,如果有一种方法可以使用IList并将其转换/转换为最佳方式。我知道这可能是由于使用NHibernate.Transform.AliasToEntityMapResultTransformer而发生的。
感谢您的任何见解。我用Google搜索并搜索了SO,但尚未找到答案。
答案 0 :(得分:2)
这里的解决方案不应该那么复杂。如果您的实体看起来像:
public class MyEntity
{
public virtual int Property1 { get; set; }
public virtual string Property2 { get; set; }
...
存储过程的结果如下:
SELECT col1 as Property1 // the same alias as property name is crucial
, col2 as Property2
...
我们可以从内置的AliasToBean<TEntity>()
变换器中获利:
IList<MyEntity> results = CurrentSession.CreateSQLQuery("exec myStoredProc ...")
.SetParameters("..", ...)
.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean<MyEntity>())
.List<MyEntity>();