Как сущность обрабатывает кого -то, меняющего данные под мной (транзакции)

StackOverflow https://stackoverflow.com/questions/8334193

Вопрос

Скажите, есть следующий код:

public void SaveOrUpdate(OrderContract orderContract)
{
   foreach (var orderContract in orderContract.Tests)
   {

      Order order=dataAccess.FindOne<Order>(x=>x.OrderId==orderContract.OrderId) 
                  ?? new Order();

      // Where there are updates, put the stuff in the 
      // contract over what we already had.
      Mapper.Map(orderContract, order);

       // if it is new then add it in so it is inserted by EF.
      if (orderedTest.OrderedTestId <= 0)
          dataAccess.Add(orderedTest);

   }
   dataAccess.SaveChanges();
}

Есть ли у EF что -то, что будет заботиться, если кто -то обновит заказ после того, как я его получу (в FindOne вызов?

Или это просто с радостью перезаписывает любые изменения, которые были сделаны между получением данных и моим призывом к SaveChanges?

Если это не сделает этого, то звонит ObjectContext.Connection.BeginTransaction Будьте лучшим, чтобы защитить меня? Или я должен использовать new TransactionScope()?

И как кто -либо из них может знать, какие ряды мне нужны в транзакции. (То, что я читаю строку, не означает, что я хочу, чтобы она заблокировала. Или он блокирует все таблицы в модели (Yuck)).

Примечание: я работаю с SQL Server 2008 R2 и EF 4.1

Это было полезно?

Решение

По умолчанию, да, это будет перезаписать измененные записи. Если вы беспокоитесь об этом для своего приложения, прочитайте это:

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

По умолчанию структура сущности реализует оптимистичную модель параллелизма. Это означает, что блокировки не хранятся на данных в источнике данных между при запрос данных и обновления данных. Структура сущности сохраняет изменения объекта в базу данных без проверки параллелизма. Для организаций, которые могут испытывать высокую степень параллелизма, мы рекомендуем, чтобы организация определила свойство в концептуальном уровне с атрибутом complunrencyMode = "Исправлено" ..... (перейдите по ссылке, чтобы узнать больше)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top