我有一个名为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;
}
}
是否有效,但我的问题是:由于我已经为IUserType
实现了FiscalYear
,是否可以将此代码简化为以下内容:
public IEnumerable<FiscalYear> FiscalYears
{
get
{
return Session
.CreateSQLQuery(FiscalYearsQuery)
.List<FiscalYear>();
}
}
不幸的是,这不起作用。使用Transformers.AliasToBean
也无济于事,因为FiscalYear
是值类型而不是实体。
我认为这真的很容易做到,但到目前为止我的所有尝试都失败了。我想我只是遗漏了一些东西?
答案 0 :(得分:0)
使用CreateSQLQuery
时必须添加返回值的类型,我从未使用自定义类型的本机SQL查询,但您可以尝试:
return Session
.CreateSQLQuery(FiscalYearsQuery)
.AddScalar("*QueryColumnName*", FiscalYear)
.List<FiscalYear>();
如果这不起作用,您可以实施IResultTransformer
以更优雅的方式转换数据。
答案 1 :(得分:0)