ich benutze die DbExecutionStrategy, um mein Programm zu unterstützen Verbindungs-Timeout bei der Abfrage des Servers, aber es funktioniert nicht wie erwartet.DbExecutionStrategy versucht mehr als MaxRetryCount
Hier ist meine Klasse:
public class MyExecutionStrategy : DbExecutionStrategy
{
static MyExecutionStrategy()
{
RetriesPerInstance = new Dictionary<int, int>();
}
private const int MaxRetryCount = 5;
private static TimeSpan _maxDelay = new TimeSpan(0, 0, 3);
private int _instanceNo;
public MyExecutionStrategy() : base(MaxRetryCount, _maxDelay)
{
_instanceNo = ++TotalInstances;
RetriesPerInstance[_instanceNo] = 0;
}
public static Dictionary<int, int> RetriesPerInstance { get; private set; }
public static int TotalRetries
{
get
{
return RetriesPerInstance.Values.Sum();
}
}
public static int TotalInstances { get; private set; }
protected override bool ShouldRetryOn(Exception ex)
{
RetriesPerInstance[_instanceNo]++;
return true;
}
}
Hier ist meine Frage:
private void Form1_Load(object sender, EventArgs xe)
{
var dengineEntities = new dengineEntities();
try
{
var proj = dengineEntities.motorista_erro.ToArray();
}
catch (Exception e)
{
var tries = MyExecutionStrategy.TotalRetries;
}
}
Für einen ToArray, gibt er 42 Wiederholungen, und instanziiert 14 Strategien vor der RetryLimitExceededException werfen.
Warum hört es bei 5 Versuchen nicht auf und warum erstellt es mehr als eine Instanz für eine einzelne Abfrage? Gibt es etwas, was ich nicht sehe?
diese meine Kontextklassen sind:
public partial class dengineEntities : DbContext
{
public dengineEntities()
: base("name=dengineEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<motorista_erro> motorista_erro { get; set; }
}
public partial class motorista_erro
{
public int MOT_ID { get; set; }
public string MOT_NOME { get; set; }
public bool MOT_SIT_FUNC_ID { get; set; }
public int IDEMP { get; set; }
}
<connectionStrings>
<add name="dengineEntities" ...etc...etc../>
</connectionStrings>
Können Sie den Code zeigen, wo Sie die Verbindung/die ExecutionStrategy in Ihrem Formular-Controller erhalten? – Martin
aktualisiert Martin, aber ich benutze entityframework, so dass die Verbindung auf der DengineEntities connectionString erstellt wird ... und zum Testen..im Ausschalten meines Netzwerks zu erzwingen "Kann nicht verbinden" mysqlexception – George
Also wo ist die ExecutionStrategy verdrahtet, tut mir leid, wenn Ich war nicht klar genug darüber, dass ich das wissen wollte. – Martin