У меня есть простой модульный тест Entity Framework 4, который создает новую запись, сохраняет ее, пытается найти, а затем удаляет. Все прекрасно работает, если только ...
... Я открываю SQL Server Management Studio, находясь в точке останова в модульном тесте, и выполняю инструкцию SELECT, которая возвращает только что созданную строку ( не SELECT FOR UPDATE, а не WITH (updlock) ), без транзакций, просто обычный SELECT).
Если я сделаю это перед попыткой найти только что созданную строку, я не найду строку. Если я вместо этого сделаю это после нахождения строки, но перед удалением строки, я найду строку, но получу исключение OptimisticConcurrencyException.
Это постоянно повторяется.
Модульный тест:
[TestMethod()]
public void CreateFindDeleteActiveParticipantsTest()
{
// Setup this test
Participant utPart = CreateUTParticipant();
ctx.Participants.AddObject(utPart);
ctx.SaveChanges();
// External SELECT Point #1:
// part is null
// Find participant
Participant part = ParticipantRepository.Find(UT_SURVEY_ID, UT_TOKEN);
Assert.IsNotNull(part, "Expected to find a participant");
// External SELECT Point #2:
// SaveChanges throws OptimisticConcurrencyException
// Cleanup this test
ctx.Participants.DeleteObject(utPart);
ctx.SaveChanges();
}