回落到備份數據庫時,最主要的是不可達/向下。
當前實現:
檢測到問題,當,使用類實現IDbCommandInterceptor改變連接字符串備用服務器。
- 關閉截取上下文的連接。
- 更改連接字符串。
- 打開連接。
這正常工作與ReaderExecuting,但不與NonQueryExecuting。我可以看到的後備服務器的連接是開放的,看起來不錯,但我得到在context.SaveChanges(以下):
基礎提供失敗的提交。
InnerException:值不能爲空。參數名:連接
UPDATE: 看起來有點多地進入這個後,我看到的問題是通過調用SaveChanges創建的事務中發生()。上下文關閉連接導致在提交時由事務對象拋出異常。我無法找到更改此事務的連接或連接字符串的方式。在ConnectionGetting()中使用IDbTransactionInterceptor處理它並在上下文中創建新的事務並沒有幫助,它仍然繼續嘗試提交(可能是競爭條件,而不是這樣做的好辦法)。 ChangeDatabase()似乎不起作用,因爲連接應該在同一臺服務器上。
所以現在的問題是:有沒有辦法改變現有交易的連接/連接字符串?
堆棧跟蹤:
at System.Data.Entity.Utilities.Check.NotNull[T](T value, String parameterName)
at System.Data.Entity.Infrastructure.Interception.DbTransactionInterceptionContext.WithConnection(DbConnection connection)
at System.Data.Entity.Infrastructure.Interception.DbTransactionDispatcher.Commit(DbTransaction transaction, DbInterceptionContext interceptionContext)
at System.Data.Entity.Core.EntityClient.EntityTransaction.Commit()
答案很可能一直在臉上一直盯着我:System.Data.Entity.Infrastructure.Interception.DbTransactionInterceptionContext.WithConnection(DbConnection連接) – Levent