#entity-framework
#entity-framework
Вопрос:
Меня смущает ObjectContext Entity Framework.Принимайте все изменения. Вопрос в том, кто принимает и кто вносит изменения?
В общем, как контролировать транзакции и изоляцию транзакций в Entity Framework?
Я новый пользователь, поэтому я могу редактировать только свой собственный вопрос…….
Спасибо вам, ребята… Акрам Шахда и Ладислав Мрнка
Теперь мое впечатление от EF больше не очень плохое, хотя оно не добавляет никакой ценности с точки зрения функциональности по сравнению со старыми добрыми временами «Соединение, транзакция, ADO.Net Доступ к базе данных в стиле «Хранимая процедура», за исключением того, что это может привести к некоторым потенциальным проблемам безопасности и добавить некоторые административные работы к администраторам баз данных (поскольку строка подключения должна иметь разрешение на все таблицы) и ограничить использование некоторых методов повышения производительности, особенно во время некоторых пакетных операций с базой данных.
Я рад, что я все еще могу сохранить тот же уровень контроля над транзакциями и уровнем изоляции транзакций, используя «Enlist» (еще одно новое слово Microsoft, почему бы им просто не использовать «use») для управления моим собственным подключением и «TransactionScope», где я могу выбрать желаемый уровень изоляции.
Теперь мой вопрос об «ObjectContext.Принятые изменения » являются:
- Кто вносит изменения?
- Кто принимает изменения?
Спасибо……
Ответ №1:
По умолчанию AcceptAllChanges
вызывается во время SaveChanges
. Если сохранение выполнено успешно, изменения принимаются. Вы можете отключить это и принять изменения вручную, вызвав AcceptAllChanges
. Это может быть полезно в некоторых более сложных сценариях. Одним из таких сценариев может быть сложная транзакция, в которой обрабатывается несколько транзакционных ресурсов.
Например, давайте предположим, что я хочу сохранить данные в базе данных и отправить сообщение MSMQ в одной и той же распределенной транзакции:
using (var scope = new TransactionScope())
{
// This version will not accept changes automatically
context.SaveChanges(SaveOptions.DetectChangesBeforeSave);
// Let's assume this sends message to the message queue
myMessageSender.SendSomeMessage(...);
scope.Complete();
// Now I know that transaction is completed and I can accept
// changes in the context
context.AcceptAllChanges();
}
Если бы я не использовал ручное принятие в примере, ошибка при отправке сообщения откатила бы транзакцию (поэтому данные не были бы сохранены в базе данных), но мой контекст был бы в состоянии, когда все изменения приняты, и я не смог бы обработать их снова.
Комментарии:
1. Спасибо Акраму Шахде и Ладиславу Мрнке.
Ответ №2:
Для управления транзакциями в entity Framework вы можете перейти по следующей ссылке:
Комментарии:
1. Спасибо, благодарю вас, Акрам Шахда и Ладислав Мрнка.