【问题标题】:How to refresh context in EF6?如何在 EF6 中刷新上下文?
【发布时间】:2016-10-13 23:13:15
【问题描述】:

我有两个窗口。它们有单独的 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();

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

我的代码有什么问题?

【问题讨论】:

  • 你有两个变量名 ctx 和 context,它们是指你正在处理的同一个对象上下文吗?
  • @IslamYahiatene 不。它们引用不同的上下文对象。
  • @IslamYahiatene 现在我更改了代码,我指的是整个应用程序中的一个上下文,但它仍然不起作用。
  • 你能贴出你在Window2中编辑数据的代码吗?

标签: c# entity-framework-6


【解决方案1】:

你可以这样使用,那就不用手动处理了,是自动的。

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

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

Working with DbContext

Managing DbContext the right way

【讨论】:

  • 但是如果我想将某些东西绑定到那个上下文怎么办?我有 ItemsSource = ctx.Layouts.Local 的数据网格。
  • 您必须在using 语句中使用正确的context 对象,如上所示。然后它将正确地使用binddispose context。您不需要手动处理。
【解决方案2】:

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

从方法名称来看,我假设您使用的是 WinForms。因此,请尝试以下操作。

添加using System.Data.Entity然后试试

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

Source

【讨论】:

    猜你喜欢
    • 2015-03-18
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 2015-09-24
    • 2018-12-17
    • 1970-01-01
    相关资源
    最近更新 更多