Я не получил нигде на форуме Microsoft. То, что сработало для одного пользователя, не сработало для меня, поэтому я, должно быть, делаю что-то не так.
Мне нужно, чтобы возвращаемые данные соответствовали тому, что находится в базе данных, но через 6 секунд они возвращаются как предыдущие данные, которые были только что обновлены. Я создаю контекст внутри метода и использую StoreWins, но, возможно, я использую его неправильно.
Вот пример метода.
public bool MyExampleMethod(long id, long newId, long oldId)
{
using (var context = new myEntity())
{
my_table data = (from d in context.my_table
where d.id == id
select d).FirstOrDefault();
context.Refresh(System.Data.Objects.RefreshMode.StoreWins, data);
if (data.dataId != oldId) { return false; }
data.dataId = newId;
context.SaveChanges();
return true;
}
}
У меня также есть вход в систему с временными метками, потому что я отслеживаю oldId. Я видел (более одного раза) 6 секунд спустя, что метод вызывается снова с использованием неправильного (old oldId), и строка возвращается со старым oldId вместо ранее установленного newId. Это невозможно, потому что dataId был изменен на newId и сохранен. NewId никогда не совпадает со oldId, и я убедился, что этого не происходит. Проблема происходит случайно. В 99% случаев это нормально, но когда он возвращает старые данные, он создает много неверных данных, которые я должен исправить вручную.
Должен ли я что-то делать после context.SaveChanges ()? или я неправильно использую StoreWins?
Дополнительная информация:
ID:
Первичный ключ / идентификационный столбец.
NewID:
Это идентификатор пользователя, который обновляет строку
oldId:
Это идентификатор пользователя, который последний раз обновлял строку
Мне нужно убедиться, что строка не была изменена кем-то еще, прежде чем обновлять ее. Первоначально я имел oldId в коде LINQ, но изменил его, пытаясь выяснить, почему возвращаются старые данные.
Дело в том, что если кто-то еще меняет строку, и она уже была кем-то изменена, мне нужно уведомить пользователя.
Сегодня я увидел, что 16 секунд спустя старые данные были возвращены кодом LINQ (у меня есть временные метки). Я начинаю думать, что проблема в том, что изменения иногда не сохраняются или это какая-то проблема с кэшированием.
Обновление:
Я думаю, я мог бы знать, почему .. запускать некоторые тесты.