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
必须映射为惰性)。
此外,如果您正在调试此代码 - 调试器可能会导致意外的初始化查询。所以请确保它不是由于某些断点引起的 - 尝试 运行 没有调试器的代码。
我正在测试新的 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
必须映射为惰性)。
此外,如果您正在调试此代码 - 调试器可能会导致意外的初始化查询。所以请确保它不是由于某些断点引起的 - 尝试 运行 没有调试器的代码。