verwendetes Datenbanksystem: SQLServer 2005
Ich bekomme die Meldung "Transaktionen mit IsolationLevel-Snapshot können nicht erweitert werden." bei folgendem Code:
public class DBLogic
{
public DbConnection OpenConnection()
{
DbConnection retConnection;
String connString ="...";
dataProviderFactory = DbProviderFactories.GetFactory("System.Data.SqlClient");
retConnection = dataProviderFactory.CreateConnection();
retConnection.ConnectionString = connString;
retConnection.Open();
return retConnection;
}
public void GetFullKontaktList<T>()
{
...
using (DbConnection connection = OpenConnection()) <-- Exception
{...}
}
}
public class DBForm
{
private void button1_Click(object sender, EventArgs e)
{
TransactionScopeOption tssOptions = new TransactionScopeOption();
TransactionOptions tsOptions = new TransactionOptions();
tsOptions.IsolationLevel = System.Transactions.IsolationLevel.Snapshot;
tsOptions.Timeout = new TimeSpan(0, 0, 0, 0, 0);
using(TransactionScope ts = new TransactionScope(tssOptions,tsOptions))
{
DBLogic.GetFullKontaktList<Person>();
DBLogic.GetFullKontaktList<Firma>(); <-- Exception
}
}
}
Ich kann mit der Meldung GARNIX anfangen...irgendwer ne Idee??
Howard
Beim zweiten GetFullKontaktList-Aufruf öffnest Du eine zweite Verbindung zur Datenbank - in diesem Moment versucht der SQL Server, aus der zuvor lokalen Transaktion eine verteilte zu machen (mit Hilfe des MS DTC).
Dieser Vorgang (auch bekannt als Transaction Propagation) wird bei Transaktionen mit Isolationslevel Snapshot anscheinend nicht unterstützt.
Lösung:
Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden
Danke für die schnelle Antwort.
- oder nur eine Datenbankverbindung nutzen
Okay aber wie soll ich DAS denn lösen? dieses ...OpenConnection() ist doch in einer völlig anderen Klasse. Die hat doch keine Ahnung das sie
Ich dachte genau für sowas nimmt man die "ambient" Transactions???? (oder hab ich doch keine??)
Howard
Transaktionen gehören eben auch in den DAL.
Vielleicht wird dir diese Diskussion helfen:
Oder sowas um die Connection durchzuschleppen:
http://blogs.msdn.com/dataaccess/archive/2006/02/14/532026.aspx