NHibernate 5.0 AsQueryable 没有按预期工作?

NHibernate 5.0 AsQueryable not working as supposed to?

我正在测试新的 NHibernate 5.0 (5.1.3) AsQueryable()

尝试过:

var myList = session.Load<MyObject>(1).MyList.AsQueryable()
  .Where(x => x.Prop == "123")
  .ToList();

我得到了 3 Sql 服务器点击(使用 NHibernate 配置文件):

(1) SELECT * from tblObject where Id = 1

(2) SELECT * from tblMyList where MyObjectId = 1 and Prop = '123'

(3) SELECT * from tblMyList where MyObjectId = 1

我的理解是只会生成第二个SQL。我在这里遗漏了什么吗?

我的列表映射:

m.Bag(x => x.MyList, list =>
{
    list.Key(k => k.Column("Id"));
    list.Cascade(Cascade.All | Cascade.DeleteOrphans);
    list.Inverse(true);
    list.Table("tblMyList");
});

编辑(添加了一些测试)

按照 Roman 的建议,我做了一些没有调试的测试

session.Load<MyObject>(1); // No query

session.Load<MyObject>(1).MyList  // Query 1    

session.Load<MyObject>(1).MyList.AsQueryable() // Query 1 and 2
  .Where(x => x.Prop == "123")
  .ToList();

您应该确保单独使用 session.Load<MyObject>(1).MyList 不会导致任何查询。否则它是你映射的东西(为了避免额外的查询MyObject必须映射为惰性)。

此外,如果您正在调试此代码 - 调试器可能会导致意外的初始化查询。所以请确保它不是由于某些断点引起的 - 尝试 运行 没有调试器的代码。