我有两个类似的查询理论上返回相同的结果:
var requestNotWorking = SessionManagement.Db.Linq<Item>(false).Where(i =>
i.Group != null && i.Group.Id == methodParameter)
.ToList();
此请求返回 0 个项目,即使它应该返回一个。以下是后者的重写,但调用了该ToList()
方法。此请求有效并返回第一个查询中预期的项目!
var requestWorking = SessionManagement.Db.Linq<Item>(false).ToList().Where(i =>
i.Group != null && i.Group.Id == methodParameter).ToList();
注意:SessionManagement.Db.Linq<Item>(false)
是一个通用的 Linq to Nhibernate 方法,其布尔属性确定请求是必须在缓存中执行(true)还是在数据库中执行(false)。据说这种方法没有任何问题,因为它在解决方案的许多其他部分都可以正常工作。Item 的映射没什么花哨的:没有包和以下参数:
lazy="false" schema="dbo" mutable="false" polymorphism="explicit"
为什么会这样?
编辑:
requestNoWorking 生成的 sql 请求以:
(Item.Group_ID is not null) and Item.Group_ID=@p0',N'@p0 int',@p0=11768
requestWorking生成的sql请求大致是一个select * from dbo.Items