我有一个编辑模型类型M1的对话框D1和编辑模型类型M2的另一个对话框D2。 M2包含的内容之一是对M1的引用,并且为了便于用户D2包含启动D1的按钮,除了可以从顶层访问D1和D2之外。在ActiveRecord中需要嵌套事务的嵌套UI
D1和D2中的每一个在输入时创建TransactionScope
(使用TransactionMode.New
),当用户与对话交互时修改模型对象(M1或M2),并在用户按下确定/取消时适当提交/回滚纽扣。
从顶层打开对话框时,此功能可以很好地工作。
当从D2内打开D1时,预期的行为是单击D1中的确定应立即保存到数据库,然后M1中的更改应该对D2可见。 (D2然后可以保存或取消自己的M2的变化不影响M1)
什么实际发生的是,改变M1似乎D1关闭时将得到保存到数据库(与前D2关闭),但D2无法看到对M1的更改 - 大概是因为D2中的会话/事务认为它具有最新的对象,因此不会重新查询数据库,即使调用了FindFirst
等也是如此。有没有办法强制它(不失去对M2的改变)?
(另一个奇怪的现象是,无论D1 & D2钩上TransactionScope.OnCompleted
,但D1这只火灾时,D2被关闭时,D1从D2叫的情况。)