У меня есть таблица с именем ProjectActivity
с первичным ключом: ProjectCode и ActivityId и индекс для ProjectCode
Наши веб-сайты генерируют запросы к этой таблице (без использования других таблиц) и всегда запрашивают строки с одинаковым ProjectCode
Иногда мы запускаем задание в c #, которое удаляет все строки с определенным ProjectCode и вставляет новые строки для этого конкретного ProjectCode в транзакцию.
using (var dbContextTransaction = db.Database.BeginTransaction())
{
try
{
db.Database.ExecuteSqlCommand("delete FROM [TS_Repository].[dbo].[ProjectActivities] where ProjectCode = {0} ", project.Code);
LogManager.WriteRequestLog("Deleted Existing Project Activities");
if (ProjectActivities.Count > 0)
{
db.Set<ProjectActivity>().AddRange(ProjectActivities);
db.SaveChanges();
}
dbContextTransaction.Commit();
LogManager.WriteRequestLog("Refresh ProjectActivities succesfully for " + project.Title);
}
catch (Exception exc)
{
dbContextTransaction.Rollback();
throw exc;
}
}
Наша проблема в том, что, хотя эта транзакция (3/4 минуты) обрабатывается, наши веб-сайты не могут выполнить какой-либо запрос (вся таблица заблокирована).
Мы должны получить этот сценарий:
До совершения транзакции веб-сайт должен запрашивать «старые» данные. Возможно ли реализовать этот сценарий? Я могу понять, что мы должны обмануть уровень блокировки и изоляции.
Заранее благодарю за любые советы.