0

这是对这个问题的阐述和澄清。

假设我有两张桌子,Foo并且Bar.

Bar有一个 FK 到Foo.

在应用程序中,表由类表示,并Foo有一个Bars 列表。 Bar有一个 id 的属性,Foo它在数据库中有一个 FK。

在 aSessionTransactionwith的上下文中IsolationLevel.ReadUncommitted,我将一个实例添加Foo到数据库中,将生成的 id 分配给Foo_id实例的属性Bar并将其添加到数据库中。

现在,调用之前Transaction.Commit(),是否可以从数据库中读取 NHibernateFoo列表Bar?也就是读取未提交的数据?

创建了一个 VS2012 项目来演示这一点。它包括一个用于构建所需数据库的 SSDT 项目,并进行了显示我所问问题的测试。

谢谢你。

4

1 回答 1

0

在同一事务的上下文中,您可以读回您对数据库所做的所有更改,所以是的。事务的隔离级别与在该事务中所做的更改无关。

然而,NHibernate 通常不会更新已经加载的对象。但是如果你 Flush(),然后是 Clear() 或 Evict(),然后再次读取 Foo,它的集合将包括 Bar 的实例。(只要您在同一个会话中,提交事务与此无关,除非使用默认设置 Commit() 会自动调用 Flush()。)

于 2013-08-11T21:38:49.737 回答