刷新单独的Castle ActiveRecord事务,并在另一个事务中刷新对象
问题描述:
我已将所有ASP.NET请求包装在会话中,并且只有在请求最后才会提交事务。刷新单独的Castle ActiveRecord事务,并在另一个事务中刷新对象
在执行请求期间的某个时刻,我想插入一个对象并使其对其他潜在线程可见 - 即将插入操作拆分为新事务,提交该事务并继续前进。
原因是有问题的请求遇到一个API,然后链接点击另一个我的页面(几乎同步),让我知道它处理了,因此双提交交易记录,因为原始请求有尚未完成,因而没有提交交易记录。
所以我已经试过包装用新SessionScope,TransactionScope的(TransactionMode.New),两者的结合插入代码,手动冲洗一切等
然而,当我打电话刷新的对象我米仍然得到旧的对象状态。
下面是一些代码样本我所看到的:
Post outsidePost = Post.Find(id); // status of this post is Status.Old
using (TransactionScope transaction = new TransactionScope(TransactionMode.New))
{
Post p = Post.Find(id);
p.Status = Status.New; // new status set here
p.Update();
SessionScope.Current.Flush();
transaction.Flush();
transaction.VoteCommit();
}
outsidePost.Refresh();
// refresh doesn't get the new status, status is still Status.Old
任何建议,想法和意见是值得赞赏!
答
我以前有类似的问题,与隔离级别有关。默认隔离级别设置为“快照”,并且在SQL Server上运行时,这意味着第一个事务自启动以来不会看到任何更改。也许这是你的隔离级别?
如果没有,尝试配置上面的那个后直接创建一个全新的TransactionScope,看看你是否可以读取它如新。如果你不能,这可能与外部交易无关。
希望有所帮助。
Marcus
感谢马库斯,试过了,但不幸的是它没有做到这一点。我刚刚结束了在ActiveRecord之外的所有事情。 – eanticev 2010-07-08 14:27:30