我有一个一类到一表的映射;不幸的是,这个表有 110 多个列,查询需要很长时间,尤其是大多数时候我只想查看
我的问题是查询是根据用户想要查看的内容动态生成的。我无法真正使用不同的列创建不同的映射,因为会有大量的组合。我正在使用条件 API 来生成查询。我还可以使用它来仅选择用户想要的列吗?或者其他方法?
Thanks
使用 LINQ 很容易做到(假设您使用的是 NHibernate 3.0 或更高版本):
var products = from p in Session.Query<Product>()
where // ...some query (snip)
select new
{
Name = p.ProductName,
Description = p.ShortDesc,
Price = p.Price,
Units = p.Quantity
};
另外,如果您使用 HQL,您可以像使用 T-SQL 一样选择所需的列,但使用Transformer
获取强类型对象:
首先使用缩小的列创建一个类:
public class ProductReport
{
public string Name { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public int Units { get; set; }
}
然后你的查询:
string hql = "select p.ProductName as Name, p.ShortDesc as Description ...(snip) " +
"from Product p " +
"where ...some query (snip)";
IQuery query = Session.CreateQuery(hql)
.SetResultTransformer(Transformers.AliasToBean<ProductReport>());
IList<ProductReport> products = query.List<ProductReport>();
只需确保查询中的别名(如名称、描述等)与类中的属性名称匹配即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)