NHibernate 多次执行相同的查询
Posted
技术标签:
【中文标题】NHibernate 多次执行相同的查询【英文标题】:NHibernate execute the same query several times 【发布时间】:2020-12-01 21:13:47 【问题描述】:我多次执行 NHibernate 查询,只更改一个参数。
这是我的代码
if (channelCount > 1)
for (int i = 0; i < channelCount; i++)
int minOrderItemFirst = Session.GetNamedQuery("GetMinOrderItem")
.SetInt32("year", item.Year)
.SetString("orderKind", item.OrderKind)
.SetInt32("orderNo", item.OrderNo)
.SetInt32("orderItem", item.OrderItem)
.UniqueResult<int>();
//I have minOrderItemFirst as int and I need to use it as .SetInt32("orderItem")
// Session.GetNamedQuery("GetMinOrderItem")
// .SetInt32("year", item.Year)
// .SetString("orderKind", item.OrderKind)
// .SetInt32("orderNo", item.OrderNo)
// .SetInt32("orderItem", minOrderItemFirst)
// .UniqueResult<int>(); .... etc as said in for loop
// I am ok to increment minOrderItemFirst in every next call
提前感谢您的帮助!
【问题讨论】:
我不确定 - 您是在问如何让 nhibernate 多次运行查询,每次更改一个参数,还是在抱怨 nhibernate 在您不希望的情况下多次运行查询它到? 我在问如何做好! 哦.. 呃...好吧,您使用 nHibernate 的方式我不太认识;看起来你有点像使用参数化 SQL 的一些薄包装器一样使用它,它会自动为你映射 POCO,有点像 Dapper 那样,所以你真的需要考虑更改 GetMinOrderItem 所以它基于像“SELECT * FROM 不管 WHERE”这样的查询id IN (@p1,@p2,@p3)" 然后一次调用 3 个项目(例如)或查看 nHibernate 是否可以支持表值参数,以便您可以将整个值表传递给 DB 和join it.Better to send 10 values in 1 query than run 1 query 10x 【参考方案1】:我得到了类似的东西,但我不确定这是一个理想的解决方案。有人可以解释如何用更少的代码或更优雅地实现它?
if (chCount > 1)
int[] results = new int[chCount + 1];
int firstNumber = Session.GetNamedQuery("GetMinOrderItem")
.SetInt32("year", item.Year)
.SetString("orderKind", item.OrderKind)
.SetInt32("orderNo", item.OrderNo)
.SetInt32("orderItem", item.OrderItem)
.UniqueResult<int>();
results[0] = firstNumber;
for (int i = 1; i < chCount; i++)
results[i] = Session.GetNamedQuery("GetMinOrderItem")
.SetInt32("year", item.Year)
.SetString("orderKind", item.OrderKind)
.SetInt32("orderNo", item.OrderNo)
.SetInt32("orderItem", results[i - 1])
.UniqueResult<int>();
【讨论】:
以上是关于NHibernate 多次执行相同的查询的主要内容,如果未能解决你的问题,请参考以下文章
将原生 SQL where 子句应用于实体的 Nhibernate 查询
NHibernate 似乎没有批量插入 PostgreSQL