【问题标题】:NHibernate Future Query with ResultSetTransformer带有 ResultSetTransformer 的 NHibernate 未来查询
【发布时间】:2012-07-16 22:02:10
【问题描述】:

我正在尝试使用 nhibernate 查询任意 sql 数据,只要我不使用 Futures 功能,它就可以正常工作,但是,当我使用 Futures 时,数据不会传递到 ResultSetTransformer。

示例代码:

public class TestResultSetTransformer : IResultTransformer
{
    public object TransformTuple(object[] tuple, string[] aliases)
    {
        return tuple;
    }

    public IList TransformList(IList collection)
    {
        return collection;
    }
}
public void Foo(ISession sess){
        var x = sess.CreateSQLQuery("select * from MailEvent").SetResultTransformer(new TestResultSetTransformer()).Future<object[]>();
        var xprime = sess.CreateSQLQuery("select * from MailEvent").SetResultTransformer(new TestResultSetTransformer()).List<object[]>();
        foreach(var y in x)
        {

        }
}

在这个例子中,futures 查询返回一个空对象数组的列表,它具有正确的行数,当我调试它时,object[] 元组是空的,但是使用列表查询,它可以按预期工作。

【问题讨论】:

  • 我也有同样的问题。

标签: nhibernate resulttransformer


【解决方案1】:

你不妨试试这样的:

public class MailEvent
{
    public virtual int Id{get;set;}
    public virtual string Message{get;set;}
}

public IEnumerable<MailEvent> GetMailEvents(ISession session)
{
    return session.CreateSQLQuery("select Id, Message from MailEvent")
                  .SetResultTransformer(Transformers.AliasToBean<MailEvent>())
                  .Future<MailEvent>();        
}

假设您知道目标格式,这应该将任意 SQL 数据转换为您需要的数据

【讨论】:

  • 我没有做两次查询(甚至没有编译我刚写的代码),但模式是合理的。
  • 事实证明这对我不起作用,因为 NHibernate 中有一个错误。我已经在他们的 JIRA 上报告了它,希望他们正在努力。具体来说,ResultTransformers 似乎不能与期货查询结合使用。
  • 这里是您的 JIRA 问题的链接。 nhibernate.jira.com/browse/NH-3222
  • 3.3.3.4000 仍然存在问题,将近 2 年仍然存在 :(
  • 您好,从第 4 版开始已修复
猜你喜欢
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 2016-07-23
相关资源
最近更新 更多