NHibernate command_timeout funktioniert nicht mit Batches

8

Heute habe ich ein Problem mit Timeouts erlebt.

Ich habe die folgende Konfiguration, die verwendet wird, um eine SessionFactory zu erstellen:

%Vor%

Ich speichere es nicht in web.config, sondern in einer XML-Datei, die manuell an die Konfiguration übergeben wird:

%Vor%

Somit kann ich mehrere Session-Factories (pro Datenbank) mit unabhängigen Konfigurationen haben.

Aber command_timeout scheint nur dann effektiv zu sein, wenn NHibernate keine Stapel verwendet. Wenn SQL-Befehle stapelweise vorliegen, dann bekomme ich für einige große Stapel:

%Vor%

Beim Suchen nach einer Lösung habe ich einen Artikel gefunden, der erklärt, warum das so ist: Ссылка

Die Ursache des Problems liegt darin, dass NHibernate beim SQL-Batching Cfg.Environment.CommandTimeout anstelle von command_timeout verwendet, das beim Erstellen einer Sitzung an eine Konfiguration übergeben wird.

Ich habe eine Möglichkeit gefunden, eine Problemumgehung beim Erstellen einer Konfiguration zu implementieren:

%Vor%

und jetzt sagen meine Kollegen, dass die Zeitüberschreitung jetzt anscheinend behoben ist.

Aber was mich verwirrt, ist der folgende Thread: Ссылка

was sagt:

  

Die Eigenschaft NHibernate.Cfg.Environment.Properties gibt Ihnen eine Kopie zurück   der globalen Eigenschaften, so dass Sie sie nicht ändern können.

Wenn NHibernate.Cfg.Environment.Properties eine schreibgeschützte Kopie ist, warum scheint meine Problemumgehung dann ordnungsgemäß zu funktionieren? Ist es stabil oder ist diese Korrektur unzuverlässig und könnte in anderen Fällen auftreten?

Und außerdem habe ich ein ähnliches Problem in NHibernate JIRA gefunden: Ссылка

Wenn sie sagen, dass sie Probleme mit command_timeout in v3.1.0. behoben haben, warum muss ich dann meine Abhilfe in NHibernate v3.3.2 verwenden. ?

Hat jemand dazu einen Einblick?

    
JustAMartin 08.05.2013, 16:25
quelle

1 Antwort

5

Ich hatte dasselbe Problem bei der Verwendung von Batches. Nhibernate-Klasse SqlClientBatchingBatcher mit Befehlszeitüberschreitung von Environment.GlobalProperties, die schreibgeschützt ist. Ich habe nur zwei Möglichkeiten gefunden, um den Timeout für den SqlClientBatchingBatcher.currentBatch-Befehl

zu setzen

1) Verwenden Sie das Timeout in der Datei app.config

%Vor%

2) setze die Umgebung.

%Vor%     
Manish Dalal 18.10.2013 15:33
quelle