2016-04-18 15 views
0

max_user_connections接続がすでに開いている場合にEntity Frameworkに待機させる方法はありますか?EntityFrameworkにはmysql max_user_connectionsがあります

私は例外をキャッチして再試行するか、カウンタを保持することができると思うが、それはせいぜいハッキリと感じる。

マイAzureのログは、次のメッセージでいっぱいにされています

System.Data.Entity.Core.EntityException: The underlying provider failed on Open. 
MySql.Data.MySqlClient.MySqlException: 
Authentication to host 'xxx' for user 'yyy' using method 'mysql_native_password' failed with message: 
User 'yyy' has exceeded the 'max_user_connections' resource (current value: 4) 

私は、接続文字列にMax Pool Size=4を追加しようとしたが、それは助けにはなりませんでした。例外をキャッチし、フロントエンドは何をすべきかを決める必要があり:ヴィートの提案を1として

<add name="DbContext" connectionString="Database=db;Data Source=xxx;User Id=yyy;Password=zzz;CharSet=utf8;Persist Security Info=True;Convert Zero Datetime=True;Max Pool Size=4" providerName="MySql.Data.MySqlClient" /> 
+0

'max_user_connections'がデータベースでありますEFはログインする前にそれについて知ることができません。私ができることは、catc h例外を処理してください。 –

+0

私は環境ごとに 'max_user_connections'を知っています。私はEFにもっと多くの接続を開かないように指示することができます。 – Laoujin

+0

これをパラメータとして管理してコンテキストコンストラクタで処理できますが、アプリケーションのすべてのインスタンスでこの値を同期するのは非常に面倒です。私は最良の方法はその例外をキャッチしていると信じています。 –

答えて

0

バックエンドで、私は、.NET用Aspect-Oriented programmingの実装をPostSharpを使用。この特定の例外を処理する属性を持つすべてのリポジトリを飾ることができます。

フロントエンドでは、私はおそらく400msを待ってから再び1〜3回試してみて、あきらめてしまいます。パッケージマネージャコンソールで

:あなたはまた、PostSharp plugin for Visual Studio

[Serializable] 
public class MaxMysqlConnectionExceptionHandlerAspect : OnExceptionAspect 
{ 
    public override void OnException(MethodExecutionArgs args) 
    { 
     if (args.Exception.InnerException != null && args.Exception.InnerException.Message.Contains("Too many connections")) 
     { 
      args.FlowBehavior = FlowBehavior.ThrowException; 
      args.Exception = new Exception("MAX_CONNECTIONS"); 
     } 
    } 

    public override Type GetExceptionType(MethodBase method) 
    { 
     return typeof(EntityException); 
    } 
} 

をインストールする必要が
Install-Package PostSharp

そして、クラスやメソッドを飾る:

[MaxMysqlConnectionExceptionHandlerAspect] 
public class FancyPantsService {} 
関連する問題