2016-10-12 7 views
3

私は2つのウィンドウを持っています。彼らは別のDbContextオブジェクトを持っています。EF6でコンテキストをリフレッシュする方法は?

Window1はデータビュー用です。

Window2は、データ編集用のダイアログウィンドウです。

Window2でデータを編集した後、私はctx.SaveChanges()メソッドを使用しています。

ウィンドウ2データ部分ビュー:背後

<Button Name="SaveChanges" Click="SaveChanges_Click">Save</Button> 
    <DataGrid Name="ListBoxLayouts"> <!-- "ListBox" in a name from the past --> 


    </DataGrid> 

コード:

public Window2(ref MyContext context) 
    { 
     InitializeComponent(); 
     ctx = context; 

     ctx.Layouts.Load(); 
     ListBoxLayouts.ItemsSource = ctx.Layouts.Local; 

    } 



    private void SaveChanges_Click(object sender, RoutedEventArgs e) 
    { 

     System.Console.WriteLine(ctx.SaveChanges()); 

     this.DialogResult = true; 
     this.Close(); 
    } 

ウィンドウ1がウィンドウ2からDialogResultを取得すると - 私は新しいウィンドウ1コンテキスト

を配置して作成することにより、データビューをリフレッシュしようとしています
ctx.Dispose(); 
ctx = new MyContext(); 

Layouts l = context.Layouts.Where(a => a.LayoutId == 1).First(); 

と古いバージョンのデータがあります。

私のコードに問題がありますか?

+0

が重複する可能性を試してみてくださいusing System.Data.Entityを追加[私はDbContextを更新するにはどうすればよいです](http://stackoverflow.com/questions/18169970/how-do-i-refresh- dbctext) – Igor

+0

ctxとcontextという2つの変数名があります。それらは作業中の同じオブジェクトコンテキストを参照していますか? –

+0

@IslamYahiatene Nope。これらは、異なるコンテキストオブジェクトを参照します。 – Kamil

答えて

3

このように使用できます。手動で処分する必要はありません。自動です。

以下の記事を使用してコンテキスト処理について詳しく読むことができます。

Working with DbContext

Managing DbContext the right way

+0

しかし、その文脈に何かを縛りたいのですが?私は 'ItemsSource = ctx.Layouts.Local'を持つDataGridを持っています。 – Kamil

+0

上記の 'using'ステートメントの中で正しい' context'オブジェクトを使用する必要があります。そうすれば、 'context'を正しくバインドして' dispose'します。手動で処理する必要はありません。 – Sampath

+0

それはちょうど動作しません... – Kamil

0

私はあなたの問題はあなたがLayoutデータの結合ではなく、コンテキストをリロードしてだと思います。データが正しくバインドされていないため、実際には変更を保存していない可能性があります。

メソッド名で判断すると、私はあなたがWinFormsを使用していると仮定しています。そのため、以下を試してください。

、その後の

ListBoxLayouts.ItemsSource = ctx.Layouts.Local.ToBindingList(); 

Source

関連する問題