在以不同的形式更新实体后,我想重新加载网格中的数据,但它似乎没有更新。我使用:
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.
错误,如果我调试它,子列表将获取详细数据......
答案 0 :(得分:2)
您的问题是您似乎正在使用静态或成员数据上下文。每次使用它时,您应该真正创建一个新的上下文。这就是实体框架的设计用途。
所以改变这段代码:
private void LoadData()
{
using (var db = new WhateverYourContextNameIs()) {
siparisBindingSource.DataSource = db.Siparis.Include("Kazan").ToList();
}
}
答案 1 :(得分:0)
稍微摆弄一下;我意识到由于我只有一个实时上下文,我可以使用db.entry(object).reload();
来更新所选行的对象。