2016-12-08 1 views
0

У меня есть приложение в WPF (MVVM), и в моей модели просмотра мне нужно сохранить некоторые новые записи. Это большое приложение с несколькими вкладками и использует 1 центральный контекст базы данных (EF 5).Как показать окно загрузки в WPF при выполнении операций Entity Framework с 1 DBContext?

При сохранении новых записей каждая запись программно проверяется, а затем вставляется или обновляется в базе данных через DBC-текст.

Каждый раз, когда кнопка нажата Сохранить это действие выполняется более ста записей и занимает несколько секунд ....

Спасая Я хотел бы показать окно загрузки .... и я, хотя делать это с помощью BackgroundWorker нить ... Что-то вроде здесь: Show loading window

к сожалению, я получаю AccessViolationExceptions с Entity Framework, так как я только с помощью одного и того же DbContext ...

есть любая возможность показать загрузку w indow при сохранении 1 DBContext?

Спасибо!

+1

Один «DbContext» для всего приложения - довольно плохой анти-шаблон в Entity Framework. Вы можете пересмотреть это. –

+0

Также не используйте backgroundworker, вместо этого используйте async-wait с Task api. –

ответ

0

Я хотел бы показать вам, как я делаю:

 EstaOcupado = true; 

     var taskSalvar = Task.Run(() => 
     { 
      var proxyFactory = ServiceLocator.Current.GetInstance<IServiceClientFactory>(); 
      var proxy = proxyFactory.GetCadastrosGeraisService(); 

      proxy.Open(); 

      caixa = Boot.Mapeador.Map<CaixaModel, Caixa>(Caixa); 
      caixa = proxy.SalvarCaixa(caixa); 
      proxy.Close(); 
     }); 

     try 
     { 
      taskSalvar.Wait(); 
      Caixa.EndEdit(); 
      EstaEmEdicao = false; 

     } 
     catch (AggregateException ae) 
     { 
      var msg = WcfProxy.HandleServiceExceptions(ae); 

      Resolve<IMessageVisualizer>() 
       .Show("Atenção", msg, 
        new CustomMessageVisualizerOptions() {Dialog = DialogType.Alert, Prompt = MessageButtons.OK}); 
     } 
     finally 
     { 
      EstaOcupado = false; 

      Caixa = Boot.Mapeador.Map<Caixa, CaixaModel>(caixa); 
     } 

Моя собственность «EstaOcupado» (IsBusy) является переплетены с контрольной шахты, который показывает загрузку анимации. Когда я использую Task, моя задачаSalvar работает в фоновом режиме, позволяя обновлять пользовательский интерфейс. Пожалуйста, попробуйте эту структуру.

+0

Я верю, что это просто создаст еще один поток и оставит меня с той же проблемой. – user1841243

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