我有一个简单的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();
}