首先是ef的多數據庫操作實現事務的方法
public int AddDifferenceDB(userinfo1 user1, userinfo user) { int result = 0; using (var test2DB = new test2Entities1()) { using (var test1DB = new test1Entities1()) { using (TransactionScope trans = new TransactionScope()) { try { test2DB.Set<userinfo1>().Add(user1); test1DB.Set<userinfo>().Add(user); result += test2DB.SaveChanges(); result += test1DB.SaveChanges(); trans.Complete(); } catch (Exception ex) { trans.Dispose();//出現異常,事務手動釋放 Log log = new Log(); Task.Run(async () => await log.AsyncAddLog("xxx添加出錯,事務已回滾", ErrorType.Error, ex));//寫入錯誤日志,正式環境下把XXX更換成當前操作人的ID return -1; } } } } return result; }
方法很簡單。 沒啥可說的。
主要是在
result += test1DB.SaveChanges();
的時候 總是出現錯誤。 各種各樣的錯誤。。
但是從頭到尾的解決辦法還是有的。 按照這個步驟操作應該就能解決大部分人遇到的問題
1.檢查msdtc服務是否開啟
1.在windows控制面版-->管理工具-->服務-->Distributed Transaction Coordinator-->(右鍵)屬性-->安全

2.在CMD下運行"net start msdtc"開啟服務后正常。
2.檢查防火牆,我是在本地做的測試,所以直接把防火牆關閉了,在正式服務器上是要配置入站規則和出站規則。
3.添加hosts
在DB服務器上需要添加web服務器的機器名和地址。否則容易出現“
與基礎事務管理器的通信失敗”這個錯誤。
需注意 hosts里面最后一行如果不加回車的話是不識別最后一行的。