ObjectContext.Принимайте все изменения! Кто принимает и кто вносит изменения?

#entity-framework

#entity-framework

Вопрос:

Меня смущает ObjectContext Entity Framework.Принимайте все изменения. Вопрос в том, кто принимает и кто вносит изменения?

В общем, как контролировать транзакции и изоляцию транзакций в Entity Framework?

Я новый пользователь, поэтому я могу редактировать только свой собственный вопрос…….

Спасибо вам, ребята… Акрам Шахда и Ладислав Мрнка

Теперь мое впечатление от EF больше не очень плохое, хотя оно не добавляет никакой ценности с точки зрения функциональности по сравнению со старыми добрыми временами «Соединение, транзакция, ADO.Net Доступ к базе данных в стиле «Хранимая процедура», за исключением того, что это может привести к некоторым потенциальным проблемам безопасности и добавить некоторые административные работы к администраторам баз данных (поскольку строка подключения должна иметь разрешение на все таблицы) и ограничить использование некоторых методов повышения производительности, особенно во время некоторых пакетных операций с базой данных.

Я рад, что я все еще могу сохранить тот же уровень контроля над транзакциями и уровнем изоляции транзакций, используя «Enlist» (еще одно новое слово Microsoft, почему бы им просто не использовать «use») для управления моим собственным подключением и «TransactionScope», где я могу выбрать желаемый уровень изоляции.

Теперь мой вопрос об «ObjectContext.Принятые изменения » являются:

  1. Кто вносит изменения?
  2. Кто принимает изменения?

Спасибо……

Ответ №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 вы можете перейти по следующей ссылке:

http://msdn.microsoft.com/en-us/library/bb896325.aspx

Комментарии:

1. Спасибо, благодарю вас, Акрам Шахда и Ладислав Мрнка.