Я только начал использовать новый API dbContext с классами poco. Теперь у меня есть небольшая проблема с обработкой параллелизма. Во всех моих таблицах есть столбец RowVersion (фиксированный, вычисляемый).
Я пытался следить за этим содержанием:
http://blogs.msdn.com/b/adonet/archive/2011/02/03/using-dbcontext-in-ef-feature-ctp5-part-9-optimistic-concurrency-patterns.aspx
поэтому у меня есть что-то вроде этого:
using (var context = new UnicornsContext())
{
bool saveFailed;
var unicorn = context.Unicorns.Find(1);
unicorn.Name = "Franky";
do
{
saveFailed = false;
try
{
context.SaveChanges();
}
catch (DbUpdateConcurrencyException ex)
{
saveFailed = true;
// Update original values from the database
var entry = ex.Entries.Single();
entry.OriginalValues.SetValues(entry.GetDatabaseValues());
}
} while (saveFailed);
}
Но когда я провоцирую это, это не работает так, как должно. Прежде всего, нет исключения DbUpdateConcurrencyException
, но DbUpdateException
.
Затем, когда я ловлю DbUpdateException, я получаю еще одно исключение в строке var entry = ex.Entries.Single();
:
InvalidOperationException: «Последовательность не содержит элементов»