【发布时间】:2021-02-12 16:51:46
【问题描述】:
我们使用 Vs2019 和旧版本的 Nhibernate 3.2。
我们最近升级到了 VS2019。此代码在 VS2010 中正常运行。
我们在使用 Nibernate QueryOver 时遇到了这个错误,在 where 子句中的 lambda 表达式。我将其精简为最小版本。在运行时块 1 失败,块 2 没有。为什么?我想不通。
它可能与 .net 框架 4.8、roselyn 或旧版本的 Nhibernate 相关吗?
我没有在此处发布所有业务对象,但如果需要,我可以这样做。我还在针对不同业务对象的应用程序中看到了这种行为。
无法解析属性:CS$8__locals2 of:BusinessObjectMain
第 1 块
var EventQuery = session.QueryOver<BusinessObjectMain()
.JoinAlias(ce => ce.Bo1, () => Bo1)
.JoinAlias(ce => ce.Bo2, () => Bo2, JoinType.LeftOuterJoin)
.JoinAlias(() => Bo2.Bo3, () =>Bo3, JoinType.LeftOuterJoin)
;
for (int i = 0; i < 1; i++) {
object[] arr = new object[1];
arr[0] = 202;
EventQuery = EventQuery.Where(() => Bo3.TypeId.IsIn(arr));
}
var Results = EventQuery.Future<Data>();
var list = Results.ToList();---Error happens here. could not resolve property: CS$<>8__locals2 of: BusinessObjectMain
为什么下面的代码有效?如果我将 Where 子句移到 for 循环之外,它可以正常工作而不会出现任何错误
第 2 块
var EventQuery = session.QueryOver<BusinessObjectMain()
.JoinAlias(ce => ce.Bo1, () => Bo1)
.JoinAlias(ce => ce.Bo2, () => Bo2, JoinType.LeftOuterJoin)
.JoinAlias(() => Bo2.Bo3, () =>Bo3, JoinType.LeftOuterJoin)
;
object[] arr = new object[1];
arr[0] = 202;
EventQuery = EventQuery.Where(() => Bo3.TypeId.IsIn(arr));
for (int i = 0; i < 1; i++) {
}
var Results = EventQuery.Future<Data>();
var list = Results.ToList()
【问题讨论】:
标签: nhibernate nhibernate-mapping queryover linq-to-nhibernate