0

我有一个名为的值类型FiscalYear,它本质上是一个整数的包装器。我也NHibernate.UserTypes.IUserType为它实现了。现在我可以将类型的属性FiscalYear直接映射到 SQL 类型,NHibernate 会自动转换它们。

一切正常。但现在我想执行原生 SQL 查询以从数据库中获取财政年度列表。这是当前代码:

public IEnumerable<FiscalYear> FiscalYears
{
    get
    {
        var result = new List<FiscalYear>();
        foreach (var fiscalYear in Session.CreateSQLQuery(FiscalYearsQuery).List<Int16>())
        {
            result.Add(new FiscalYear(fiscalYear));
        }
        return result;
    }
}

可行,但我的问题是:由于我已经实现了IUserTypefor FiscalYear,是否可以将此代码简化为如下所示:

public IEnumerable<FiscalYear> FiscalYears
{
    get
    {
        return Session
            .CreateSQLQuery(FiscalYearsQuery)
            .List<FiscalYear>();
    }
}

不幸的是,这不起作用。使用Transformers.AliasToBean也无济于事,因为FiscalYear它是一种值类型而不是实体。

我认为这确实应该很容易做到,但到目前为止我的所有尝试都失败了。我想我只是错过了什么?

4

2 回答 2

0

看看这个帖子:

NHibernateUtil.Custom()

那里描述了,您可以使用 NHibernateUtil.Custom(IUserType)

于 2015-06-15T08:39:22.160 回答
-1

当您使用时,CreateSQLQuery您必须添加返回值的类型,我从未使用自定义类型的原生 sql 查询,但您可以尝试:

return Session
    .CreateSQLQuery(FiscalYearsQuery)
    .AddScalar("*QueryColumnName*", FiscalYear)
    .List<FiscalYear>();

如果这不起作用,您可以实现IResultTransformer更优雅的方式来转换数据。

于 2014-03-12T16:55:43.783 回答