如何在EF6中刷新上下文?

时间:2016-10-12 17:44:13

标签: c# entity-framework-6

我有两个窗户。它们具有单独的DbContext个对象。

Window1用于数据视图。

Window2是一个用于数据编辑的对话窗口。

在Window2中编辑数据后 - 我使用ctx.SaveChanges()方法。

Window2数据部分视图:

    <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();
    }

当Window1从Window2获得DialogResult时 - 我试图通过处理和创建新的Window1上下文来刷新数据视图

ctx.Dispose();
ctx = new MyContext();

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

我正在获取旧版本的数据。

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:3)

你可以这样使用。然后不需要手动处理它。它是自动的。

 using (var ctx = new MyContext())
        {
           //your code
        }

您可以使用以下文章了解有关上下文处理的更多信息。

Working with DbContext

Managing DbContext the right way

答案 1 :(得分:0)

我认为您的问题在于绑定using System.Data.Entity数据而不是重新加载上下文。您可能实际上并未保存更改,因为数据未正确绑定。

通过方法名称判断我假设您正在使用WinForms。因此,请尝试以下方法。

添加ListBoxLayouts.ItemsSource = ctx.Layouts.Local.ToBindingList(); 然后尝试

--server

Source