Создание Entity Framework Добавление сущностей и хранимая процедура ADO.Net объединяются в одной транзакции

1

У меня есть приложение, в котором я использую Entity Framework или обрабатываю данные из таблиц базы данных. Существует основная таблица, CUSTOMER которая связана с тремя другими таблицами через внешние ключи. Связанные таблицы

RENTAL
PAYMENTS
VEHICLES

Я могу добавлять/редактировать/удалять сущности во всех этих 4 таблицах с помощью EF.

Я бы хотел изменить текущий сценарий (где EF используется для обработки всей транзакции БД) примерно так.

После создания нового объекта и при попытке сохранить сущности (5 новых сущностей/записей) обратно в базу данных, я хотел бы использовать хранимую процедуру для добавления нового объекта в модель VEHICLES и использовать EF для сохранения объектов ко всем другим модели - и все равно все это под одной транзакцией.

Кроме того, мне нужно подождать, пока вызов EF будет завершен, так как мне нужен новый CUSTOMER_ID созданный как часть сохранения EF, который будет передан в качестве входного параметра хранимой процедуры для сохранения объекта VEHICLES.

Я не хочу вызывать хранимую процедуру из-за пределов транзакции, поэтому, если вызов хранимой процедуры завершается с ошибкой, изменения, внесенные в базу данных через EF, также откатываются.

Кто-нибудь знает, как добиться этого?

PS: Не ищите образцы кода; иллюстрация высокого уровня поможет.

Я использую Entity Framework 5,.Net v4.5, VS 2013, Oracle 11g, ODP.Net

  • 0
    Будет ли работать объем транзакции?
  • 0
    Почему вы не делаете все вещи внутри хранимой процедуры?
Показать ещё 1 комментарий
Теги:
ado.net
entity-framework-5
ado.net-entity-data-model

1 ответ

0

Карта хранит procs для Entity 1) Создайте хранимую процедуру 2) Обновите модель данных, чтобы включить хранимую процедуру - меню "Обновить модель из базы данных" через EF 6.x

3) Затем найдите Entity (или создайте новый Entity) в Модели данных сущностей и подключите Хранимые Procs для вставки, обновления и удаления функций - щелкните правой кнопкой мыши Entity и выберите меню "Сохраненная процедура отображения"

4) Используйте LinqToEntity для добавления/изменения объектов с помощью Database.BeginTransaction(), затем вызовите SaveChanges() в контекст, затем Commit или Rollback.

Примечание. Начиная с EF6 Database.ExecuteSqlCommand() по умолчанию будет завершена команда в транзакции, если ее еще нет. Есть перегрузки этого метода, которые позволяют вам переопределить это поведение, если хотите. Также в EF6 выполнение хранимых процедур, включенных в модель через API, таких как ObjectContext.ExecuteFunction() делает то же самое (за исключением того, что поведение по умолчанию в настоящий момент не может быть переопределено). В любом случае уровень изоляции транзакции - это любой уровень изоляции, который поставщик базы данных рассматривает по умолчанию. По умолчанию, например, на SQL Server это READ COMMITTED. https://msdn.microsoft.com/en-us/data/dn456843.aspx

Ещё вопросы

Сообщество Overcoder
Наверх
Меню