2013-08-30 2 views
1

У меня есть клиентское приложение winforms, которое работает с datacontext. Я сейчас сталкиваюсь с некоторыми проблемами параллелизма, потому что у каждого из моих клиентов есть свой собственный datacontext, и когда они вносятся изменения, они сохраняют изменения в базе данных. Но когда пользователь А сделать изменения в Object_1, и сохранить изменения в базе данных, пользователь Б не может видеть эти изменения, сделанные на object_1 от пользователя А.Обновление DataContext с новейшими значениями базы данных

  • То, что я хочу, чтобы обновить Object_1 со значениями из базы данных, каждый раз, когда пользователь открывает объект_1.

Я попытался использовать метод DataContext.Refresh, но, похоже, он не обновляет объект со значениями базы данных. Heres пример кода:

public void updateObj(object obj) 
    { 
     if (hvilken is Apartment) 
     { 
      try 
      { 
       DataContext.Refresh(RefreshMode.OverwriteCurrentValues, obj); 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
     } 
     if (hvilken is Customer) 
     { 
      try 
      { 
       DataContext.Refresh(RefreshMode.OverwriteCurrentValues, obj); 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
     } 
    } 

Любой лучше на практике способ, чтобы обновить DataContext с новейшими значениями в базе данных?

+0

Пожалуйста, не проглатывайте исключения. Если этот код 'throw', он бросает * по причине * –

+0

Я отлаживаю код, и метод не бросает исключения. Мой тестовый пример выглядит следующим образом: 1. Измените значения на Obj1 на машине A и сохраните на db 2. Просмотреть Obj1 на машине B На машине BI теперь должен видеть значения, введенные с помощью Machine A, но я все еще получаю «старые» значения из-за того, что машина А изменила значение. Даже если я использую метод Refresh без каких-либо исключений:/ – grmihel

ответ

1

Режим DataContext.Refresh не является общим, поэтому в вашем специальном корпусе мало пользы; и пустой catch - это просто плохая практика (действительно, может быть, почему вы не знаете, почему она не работает: возможно, вы пытаетесь сказать вам, но вы игнорируете ее). Таким образом, в «наилучшей практики» путь, вы бы упростить:

public void UpdateObject(object obj) 
{ 
    DataContext.Refresh(RefreshMode.OverwriteCurrentValues, obj); 
} 

Если он не работает, он, вероятно, throw сказать вам, почему.

+0

Ну, я полностью согласен с тем, что пустые скобки, что так всегда, - это плохая практика. Но это не улов в этой ситуации, так как я работаю в режиме отладки, и метод не генерирует исключение. – grmihel

+0

Но он не обновляет связанное свойство навигационной коллекции, которое сопоставляется с другой таблицей. Он обновляет только свойства, которые отображаются в столбце таблицы, к которой указывает текущая сущность. Есть ли выход из этого в Linq to Sql? – RBT

Смежные вопросы