Varinder Raii Ответов: 2

Транзакция не получает фиксации в entity framework


Попытка выполнить сложную процедуру и сохранить данные в таблице в транзакции с помощью entity framework. Когда мой код фиксирует транзакцию, он выбрасывает исключение

Операция транзакции не может быть выполнена, так как над этой транзакцией работают отложенные запросы.

Ниже приведен код.

using (abcEntities dbContext = new abcEntities())
        {
            using (var transaction = dbContext.Database.BeginTransaction())
            {
                dbContext.USP_ResellerCustomerFile_DeleteFiles(customerId, fileId, 1);
                ResellerAndCustomerActivityDAL objCustomerActivityDAL = new ResellerAndCustomerActivityDAL();

                ResellerAndCustomerActivity objActivity = new ResellerAndCustomerActivity()
                {
                    Activity = objfile.FileName + " is temporairly permanently deleted.",//message.ReplacingSpecialCharacterswithEntities(),
                    ActivityDate = DateTime.UtcNow,
                    ResellerAndCustomerId = customerId,
                    UserTypeId = 2

                };

                dbContext.ResellerAndCustomerActivities.Add(objActivity);

                //objCustomerActivityDAL.Create(objfile.FileName + " is permanently deleted.", objUnit, out returnMessage, customerId);

                dbContext.SaveChanges();
                transaction.Commit();
            }
        }

Не знаю, почему он выбрасывает исключение отложенного запроса, потому что я выполняю его в той же транзакции.

Что я уже пробовал:

Я пытался найти его в google, но безуспешно.

2 Ответов

Рейтинг:
7

Varinder Raii

Я нашел другой способ.

Вместо того чтобы вызывать хранимую процедуру непосредственно из dbcontext, я называю ее как dbContext.Database.DbRawSqlQuery. Теперь я делаю все вышеперечисленное в следующем порядке

1) объявление и инициализация dbcontext.
2) Создание транзакции.
3) выполнение процедуры с использованием контекста, инициализированного на шаге 1.
4) сохранение записи в databae с использованием того же ddContex.
5) сохранение изменений из dbContext в базу данных.
6) совершение сделки.

Даже транзакция не нужна для создания, потому что все операторы сущности(связанные с базой данных) выполняются в транзакции по умолчанию. Его можно прочитать

here

.


Рейтинг:
1

Dave Kreskowiak

Вероятно, это связано с тем, что Entity Framework по умолчанию автоматически обертывает все операции обновления, вставки и удаления в транзакцию. Вам не нужно создавать собственный контекст транзакции.

Подробнее об этом читайте здесь здесь[^].