Скажем, есть следующий код:
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()
?
И как любой из них может узнать, какие строки мне нужно иметь в транзакции. (То, что я читаю строку, не означает, что я хочу заблокировать ее. Или она блокируетсявсе таблицы в модели (фу)).
Примечание. Я работаю с SQL Server 2008 R2 и EF 4.1