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