Как работает LINQ RefreshMode?

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

12
задан Germstorm 30 March 2011 в 08:19
поделиться