Я использую вложенные транзакции, используя интерфейс IDBConecction на С#. У меня есть методы, которые вставляют данные в две разные таблицы, но когда дело доходит до второй вставки, первая транзакция вставки блокирует вторую, вызывая исключение тайм-аута.
public void FirstInsert()
{
using (var cn = new Connection().GetConnection())
{
cn.Open();
using (var tran = cn.BeginTransaction())
{
try
{
//1st insert
SecondInsert() //calling second insert method
tran.Commit();
}
catch
{
tran.Rollback();
}
}
}
}
public void SecondInsert()
{
using (var cn = new Connection().GetConnection())
{
cn.Open();
using (var tran = cn.BeginTransaction())
{
try
{
//2nd insert, this one fails
tran.Commit();
}
catch
{
tran.Rollback();
}
}
}
}
Когда я проверяю на SqlServer, первая вставка имеет SPID 56, затем, когда вторая вставка выполняется с SPID 57, и я использую
exec sp_who2
В столбце «BlkBy» для SPID 57 написано, что он заблокирован SPID 56.
Как я могу преодолеть эти проблемы?