我有一個ASP.NET MVC應用程序。當通過CustomerController創造了一個新的客戶我運行一個新的後臺任務(使用HostingEnvironment.QueueBackgroundWorkItem)創建一個新的Azure的SqlDatabase該客戶。實體框架數據庫初始化:初始化新的Azure SqlDatabase時超時
我使用實體框架代碼首先創建/初始化新的數據庫。下面的代碼:
// My ConnectionString
var con = "...";
// Initialization strategy: create db and execute all Migrations
// MyConfiguration is just a DbMigrationsConfiguration with AutomaticMigrationsEnabled = true
Database.SetInitializer(strategy: new MigrateDatabaseToLatestVersion<CustomerDataContext, MyConfiguration>(useSuppliedContext: true));
using (var context = new CustomerDataContext(con))
{
// Neither 'Connection Timeout=300' in ConnectionString nor this line helps -> TimeoutException will rise after 30-40s
context.Database.CommandTimeout = 300;
// create the db - this lines throws the exception after ~40s
context.Database.Initialize(true);
}
我的問題是,我總是得到TimeoutException異常後約40秒。我認爲這是因爲Azure無法在短時間內初始化新的數據庫。不要誤會我的意思:Azure會很好地創建數據庫,但我想等待那個點/擺脫TimeoutException。
EDIT1: 我使用連接超時= 300在我的ConnectionString,但我的應用程序並不真正關心的是;在大約40年後,我總是碰到一個SqlError。
EDIT2: 這提出了一個例外是SQLEXCEPTION。 消息:超時已過期。操作完成之前超時的時間或服務器沒有響應。 來源:.net SqlClient數據提供
EDIT3: 我現在可以confim,這已經無關ASP.NET/IIS。即使在一個簡單的UnitTest方法中,上面的代碼也會失敗。
你能分享你所看到的實際例外,完整的錯誤消息?謝謝! –
我已添加例外。謝謝。 – mmmato
您的遷移配置類中還有一個CommandTimeout屬性,您可以嘗試設置該屬性。 https://msdn.microsoft.com/en-us/library/system.data.entity.migrations.dbmigrationsconfiguration.commandtimeout(v=vs.113).aspx –