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