0
想象一下使用實體框架6以下操作:TransactionScope是否適合在Entity Framework事務中包含副作用?
// operations on some entities
// send an email
// write to a file
db.SaveChanges();
如果db.SaveChanges();
失敗,電子郵件不應該交付,該文件不應該被寫入。我的理解是否正確,我需要將所有代碼包裝在TransactionScope
中以實現此行爲?像這樣:
using(var transaction = new TransactionScope())
{
// operations on entities here
// send an email
// write to a file
db.SaveChanges();
transaction.Complete();
}
因此,我應該安排副作用,由獨立的工作人員通過支持事務的消息隊列(例如Azure Service Bus)運行,以便使上述方法成爲有效的*和好的方法? – Korijn 2014-11-04 14:11:14
是的。因爲你在這裏是一個商業交易。好的方法是通過消息或工作流 - 而不是System.Transaction實例。這可以補償。企業TX往往很複雜,需要很長時間。如果情景變得更加複雜,我可能會使用工作流程組件。 – TomTom 2014-11-04 14:16:24