NHibernate List - 无法转换System.Collections.Hashtable类型的对象

时间:2014-07-02 17:16:42

标签: c# linq nhibernate casting

我试图完成与此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,但尚未找到答案。

1 个答案:

答案 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>();