簡體   English   中英

TransactionScope是否適合在實體框架事務中包含副作用?

[英]Is a TransactionScope appropriate to include side effects in the Entity Framework transaction?

想象一下使用實體框架6進行的以下操作:

// 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();
}

否,因為您有問題:

  • 電子郵件不是跨國的。 因此,您可以通過編寫一個Compensating Resource Manager(補償資源管理器)來處理此問題,該管理器僅在提交時使用新的API發送電子郵件。 但是,如果您通過SMTP發送電子郵件,則會發送電子郵件-郵件服務器將不會在乎您的交易。
  • 很好,轉錄NTFS已正式退休;)但是您可以使用它。 CRM(補償資源管理器)和開始時的文件備份可以解決此問題。

因此,通常來說,這種方法是有效的,但是您的兩種情況確實很糟糕。

在這種特殊情況下,一旦提交完成,我可能會使用通過SQL Broker(或MSMQ)控制的單獨排隊的業務事務來啟動其他兩個操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM