1

Der Versuch, SQLite für Komponententests zu verwenden, funktioniert einwandfrei. Einige der Repositories zu testen, ist jedoch wahrscheinlich, weil sie Transaktionen verwenden.NHibernate Interceptor zum Ändern der Transaktionslevel

Für die Transaktionen, die ReadCommitted alles ist in Ordnung, aber einige von ihnen ReadUncommitted verwenden zu benutzen, die einen Blick auf System.Data.SQLite mit nicht unterstützt:

if ((this._defaultIsolation != IsolationLevel.Serializable) && (this._defaultIsolation != IsolationLevel.ReadCommitted)) 
{ 
     throw new NotSupportedException("Invalid Default IsolationLevel specified"); 
}

Ich frage mich, ist es möglich, Abfangen der Session.BeginTransaction (...), so dass ich die Transaktionsebene nur für Komponententests ändern kann.

Aktualisierung: Meine Lösung war, den Quellcode für System.Data.SQLite herunterzuladen und die Ausnahmen zu ändern, um die Standardisolationsstufe festzulegen. Ich Bloggled darüber hier:

http://www.philliphaydon.com/2011/01/system-data-sqlite-isolationlevel-exception/

Antwort

0

Es gibt keine einfache Erweiterbarkeit Punkte für das, kurz ITransactionFactory und ITransaction umzusetzen.

Es ist wahrscheinlich einfacher, den Anruf in BeginTransaction zu verpacken, um ReadUncommitted beim Testen zu vermeiden.

+0

Yeah das ist, was ich vermeiden wollte, da dies nur den Komponententest und nicht die Anwendung betrifft. Was ich letzte Nacht getan habe, war das Herunterladen des Quellcodes für System.Data.SQLite und das Ändern der beiden Prüfungen, die es für isolationlevel durchführt, und das Ändern in serializable, anstatt eine Ausnahme auszulösen. – Phill

+0

Meine Lösung: http://www.philliphaydon.com/2011/01/system-data-sqlite-isolationlevel-exception/ – Phill

+0

Nicht schlecht. OSS-Regeln :-) –

Verwandte Themen