В случае конфликта, мне нужно перезаписать значения в базе данных моими изменениями. Я нашел следующую статью на 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. Любые идеи приветствуются.