可以让NHibernate作为EF执行查询吗?

可以让NHibernate作为EF执行查询吗?,nhibernate,Nhibernate,是否可以使用NHibernate,使其仅在使用查询/语句的返回对象后执行查询。。就像EFdoest 对于大多数使用EF的实例,在使用linq-“语句”的返回对象之前,它不会向数据库发送和执行实际查询。。例如: var x = for e in entities.MyTable select e; 这还没有执行 这意味着我能够在不从数据库中实际“提取”任何数据的情况下,以我喜欢的方式执行x-objects“linq查询”: x = x.Where(i=>i.SomeThing = some

是否可以使用
NHibernate
,使其仅在使用查询/语句的返回对象后执行查询。。就像
EF
doest

对于大多数使用
EF
的实例,在使用linq-“语句”的返回对象之前,它不会向数据库发送和执行实际查询。。例如:

var x = for e in entities.MyTable
select e;
这还没有执行
这意味着我能够在不从数据库中实际“提取”任何数据的情况下,以我喜欢的方式执行x-objects“linq查询”:

x = x.Where(i=>i.SomeThing = someThing);
仍然没有执行

x.ToList<MyTable>()
x.ToList()
现在它被执行了

x.ToList<MyTable>()
但是在
NHibernate
中,一旦事务结束或从我所了解的内容提交,查询就会执行。。在大多数情况下,这已经在存储库中完成了。因此,您不能简单地在任何其他地方更改查询,然后将其发送到数据库。因为查询已经发送,这意味着您以后只能更改结果中“显示”的内容

我可能弄错了,所以如果我错了,请纠正我


万分感谢

您可以使用分离的QueryOver尝试类似的操作

var query = QueryOver.Of<Customer>()
    .Where(x => x.LastName == "Smith"); // query is not executed yet

query.GetExecutableQueryOver(session).List();
var query=QueryOver.Of()
.Where(x=>x.LastName==“Smith”);//查询尚未执行
query.GetExecutableQueryOver(session.List();

好的是,您可以传递查询对象并在其他地方执行它。

如果我理解您的意思是正确的,这就可以在我的代码中随时执行查询。如果是,那么如果我可以在各地创建大量查询,那么NHibernate如何知道执行哪一个呢?或者它只是简单地执行所有这些。。或者,我需要返回查询对象,然后稍后可以简单地键入query.GetExecutableQueryOver(session.List();是否执行?如果关闭存储库中的上下文,则无法在EF中执行查询。所以行为是一样的。