В случае конфликта мне нужно перезаписать значения в базе данных с моими изменениями. Я нашел следующую статью в MSDN, которая объясняет, как разрешать конфликты с помощью RefreshMode:
http://msdn.microsoft.com/en-us/library/system.data.linq.refreshmode.aspx
Я решил, что KeepCurrentValues имеет смысл для моего требования, и я также нашел эту страницу с примером для этого режима:
http://msdn.microsoft.com/en-us/library/bb399421.aspx
Однако, когда я реализовал это, значения из базы данных всегда записывали мои изменения. Я попытался изменить RefreshMode на OverwriteCurrentValues и KeepChanges и каждый раз, когда сохранялись значения из базы данных. Мой подход заключался в том, чтобы вручную изменять значения в базе данных в режиме отладки в VisualStudio. Код в VS:
[MyDataContext] db = new [MyDataContext]();
try
{
[MyLINQType] old = (from o in db.[MyLINQType] where o.ID=1 select o).Single();
old.IntField = 55;
// This is where I change the IntField value manually in the database in
// debug mode to generate the conflict.
db.SubmitChanges(ConflictMode.ContinueOnConflict);
}
catch (ChangeConflictException)
{
db.ChangeConflicts.ResolveAll(RefreshMode.KeepCurrentValues);
}
Я знаю, что конфликт появляется, но каждый раз, независимо от того, как я изменяю RefreshMode, значение 55 никогда не сохраняется и изменения, которые я сделал вручную в базе данных, сохраняются. Есть ли уловка для достижения желаемого результата? Сначала я попытался создать конфликт изнутри кода, и это тоже не сработало. Возможно, я не понимал, как должен работать RefreshMode. Любые идеи приветствуются.