- В приложении от 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