我正在对一些使用NHibernate的代码进行一些维护,因为他们对NHibernate几乎一无所知......
我有以下查询
var query = string.Format(@"select s.Id, s.Iccid, c.Name as Carrier, aa.StartDate as AssignmentDate, cust.Name as AssignedCustomerName
from assetassignment aa
left join SIM s on aa.AssetId = s.Id
left join Carrier c on s.CarrierId = c.Id
left join customer cust on aa.CustomerId = cust.Id
where aa.enddate is null
and aa.CustomerId in ({0})
and s.dateremoved is null",
string.Join(",",idsToInclude));
if (!string.IsNullOrWhiteSpace(carrier))
{
query += " and c.Name = '" + carrier + "'";
}
var results = _session.CreateSQLQuery(query)
.SetResultTransformer(new AliasToBeanResultTransformer(typeof(HomepageSIMTableRow)))
.List<HomepageSIMTableRow>();
return results;
这对我来说很好(并且意味着我没有必须让NHibernate运行起来我可以使用它,但现在我需要添加分页,它只是感觉很臭。
关于如何将其移入NHibernate并增加分页的任何指导都会很棒!
答案 0 :(得分:1)
我不确定这是否适用于常规SQL,但通常使用NHibernate添加
var results = _session.CreateSQLQuery(query)
.SetFirstResult(0)
.SetSetMaxResults(30)
.SetResultTransformer(new AliasToBeanResultTransformer(typeof(HomepageSIMTableRow)))
.List<HomepageSIMTableRow>();
这适用于常规Criterias和HQL查询。
您可以将此作为参考:How can you do paging with NHibernate?
答案 1 :(得分:1)
这种感觉&#34;臭的原因&#34;是因为你正在编写SQL并将其直接传递给ORM。
NH在实体层面为paging提供了一个完整的机制。当你急切地加载其他实体时,我发现这有点棘手。
我的建议是:
不幸的是,在不知道风险/情况的情况下很难建议哪一个。