Тупики происходят очень частоC#

Место общения программистов C#
Ответить
Anonymous
 Тупики происходят очень часто

Сообщение Anonymous »

У меня часто возникают тупиковые ситуации в моем приложении, потому что
  • В приложении от 50 до 60 экранов
  • мы использовали Представления SQL для экранов списков
  • мы используем в основном только две таблицы, в которых хранятся все данные и около 170 столбцов.
  • моя функция будет вот так

Код: Выделить всё

pubic Create()
{

open.conn
begintransaction(readcommitted)

try{

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, transactionOptions))
{

select * from table1 with (holdlock)

}

db.savechanges()
scope.complete()

}
catch{
transaction.Rollback()
}
finally{
transaction.Commit()
}
}
Вопросы:
  • если я заблокирую таблицу в области транзакции , Если в этой таблице есть ссылка на внешний ключ, эта таблица также будет заблокирована. Я где-то читал, что это правда
  • До конца область видимости не завершила таблицу заблокирована и недоступна для любой другой транзакции
  • Я не могу изменить структуру таблицы, может ли кто-нибудь помочь мне с этим, чтобы решить проблему взаимоблокировки, которая происходит.
  • Использование фиксации транзакции в блокеfinally является правильным или нет, потому что до ее фиксации я не могу получить доступ к таблице, которая заблокирована внутри область действия
  • Кроме того, я использовал уровень изоляции readcommit, а также добавил индекс для таблиц, которые я использую< /p>
  • на каждом экране я блокирую таблицу, которую использую, с помощью **holdlock**
График взаимоблокировок:

Код: Выделить всё







 unknown


 unknown





(@0 int,@1 datetime2(7),@2 nvarchar(max) ,@3 int,@4 int,@5 int,@6 nvarchar(max) ,@7 nvarchar(max) ,@8 nvarchar(max) ,@9 nvarchar(max) ,@10 bit,@11 bit,@12 nvarchar(100),@13 nvarchar(100),@14 datetime2(7),@15 datetime2(7),@16 nvarchar(100),@17 nvarchar(100),@18 int,@19 nvarchar(max) ,@20 datetime2(7),@21 nvarchar(1000),@22 nvarchar(1000),@23 nvarchar(1000),@24 nvarchar(1000),@25 nvarchar(1000),@26 nvarchar(1000),@27 nvarchar(1000),@28 nvarchar(1000),@29 nvarchar(1000),@30 nvarchar(1000),@31 nvarchar(200),@32 int,@33 int,@34 int,@35 nvarchar(max) ,@36 nvarchar(max) ,@37 nvarchar(max) ,@38 datetime2(7),@39 nvarchar(max) ,@40 nvarchar(max) ,@41 int,@42 nvarchar(250),@43 int,@44 decimal(18,2),@45 decimal(18,2),@46 decimal(18,2),@47 decimal(18,2),@48 int,@49 int,@50 nvarchar(250),@51 datetime2(7),@52 int,@53 decimal(18,6),@54 decimal(18,6),@55 decimal(18,6),@56 decimal(18,6),@57 decimal(18,6),@58 decimal(18,6))

insert [dbo].[production_hdr]([acc_id], [entry_date], [acc_name], [trans_sno], [transtype_id], [transsubt





 unknown


 unknown





(@0 int,@1 datetime2(7),@2 nvarchar(max) ,@3 int,@4 int,@5 int,@6 nvarchar(max) ,@7 nvarchar(max) ,@8 nvarchar(max) ,@9 nvarchar(max) ,@10 bit,@11 bit,@12 nvarchar(100),@13 nvarchar(100),@14 datetime2(7),@15 datetime2(7),@16 nvarchar(100),@17 nvarchar(100),@18 int,@19 nvarchar(max) ,@20 datetime2(7),@21 nvarchar(1000),@22 nvarchar(1000),@23 nvarchar(1000),@24 nvarchar(1000),@25 nvarchar(1000),@26 nvarchar(1000),@27 nvarchar(1000),@28 nvarchar(1000),@29 nvarchar(1000),@30 nvarchar(1000),@31 nvarchar(200),@32 int,@33 int,@34 int,@35 nvarchar(max) ,@36 nvarchar(max) ,@37 nvarchar(max) ,@38 datetime2(7),@39 nvarchar(max) ,@40 nvarchar(max) ,@41 int,@42 nvarchar(250),@43 int,@44 decimal(18,2),@45 decimal(18,2),@46 decimal(18,2),@47 decimal(18,2),@48 int,@49 int,@50 nvarchar(250),@51 datetime2(7),@52 int,@53 decimal(18,6),@54 decimal(18,6),@55 decimal(18,6),@56 decimal(18,6),@57 decimal(18,6),@58 decimal(18,6))

insert [dbo].[production_hdr]([acc_id], [entry_date], [acc_name], [trans_sno], [transtype_id], [transsubt]

























вывод: может ли кто-нибудь дать несколько советов, как предотвратить тупик в моем сценарии.


Подробнее здесь: https://stackoverflow.com/questions/791 ... frequently
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»