实体框架重新加载数据不起作用

时间:2013-08-07 22:23:13

标签: c# entity-framework

在以不同的形式更新实体后,我想重新加载网格中的数据,但它似乎没有更新。我使用:

        private void LoadData()
    {
        siparisBindingSource.DataSource = db.Siparis.Include("Kazan").ToList();
    }

加载数据。打开对话框后:

        private void değiştirToolStripMenuItem_Click(object sender, EventArgs e)
    {
        Siparis siparis = gridView1.GetFocusedRow() as Siparis;

        if (siparis != null)
        {
            FormSiparisAddEdit siparisAddEdit = new FormSiparisAddEdit {isedit = true, sipID = siparis.ID};
            siparisAddEdit.ShowDialog();
            LoadData();
        }
    }

并更改实体,我尝试使用此方法重新加载,但内容保持不变,除非我关闭并重新打开表单。我在这里缺少什么?

为答案干杯,但我现在有另一个问题,因为我已经使db短暂存在,我无法获得详细数据,我尝试使用:

        private void gridView1_MasterRowGetChildList(object sender, DevExpress.XtraGrid.Views.Grid.MasterRowGetChildListEventArgs e)
    {
        Siparis siparis = (Siparis)gridView1.GetRow(e.RowHandle);
        using (var db = new Tank_Analizor_DBEntities())
        {
            db.Siparis.Attach(siparis);
            e.ChildList = new BindingSource(siparis, "Kazan");
        }

    }

但是我得到了

The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

错误,如果我调试它,子列表将获取详细数据......

2 个答案:

答案 0 :(得分:2)

您的问题是您似乎正在使用静态或成员数据上下文。每次使用它时,您应该真正创建一个新的上下文。这就是实体框架的设计用途。

所以改变这段代码:

private void LoadData()
{
    using (var db = new WhateverYourContextNameIs()) {
        siparisBindingSource.DataSource = db.Siparis.Include("Kazan").ToList();
    } 
}

答案 1 :(得分:0)

稍微摆弄一下;我意识到由于我只有一个实时上下文,我可以使用db.entry(object).reload();来更新所选行的对象。