【发布时间】:2017-05-13 23:58:27
【问题描述】:
朋友。 我真的需要你的帮助。我将不胜感激。
所以我在 MS SQL Server 中有实体“模型”c 字段“ID_model”和“名称”。 我想,在Form1上点击“编辑”后,还有另一个表单(FormModel),您可以在其中更改数据并将更改写入数据库。
问题是按“编辑”后出现“附加信息:一个实体对象不能被多个IEntityChangeTracker实例引用”的错误,我不知道如何解决。
Form1 中的代码:
public partial class Form1 : Form
{
MyDBEntities db2;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
db2 = new MyDBEntities();
modelBindingSource.DataSource = db2.Models.ToList();
dataGridView.Columns.RemoveAt(2);
}
private void btnEdit_Click(object sender, EventArgs e)
{
if (modelBindingSource.Current == null)
return;
using (FormModel frm = new FormModel(modelBindingSource.Current as Model))
{
if (frm.ShowDialog() == DialogResult.OK)
{
modelBindingSource.DataSource = db2.Models.ToList();
}
}
}
}
来自 FormModel 的代码:
public partial class FormModel : Form
{
MyDBEntities db2;
public FormModel(Model obj)
{
InitializeComponent();
db2 = new MyDBEntities();
if (obj == null)
{
modelBindingSource.DataSource = new Model();
db2.Models.Add(modelBindingSource.Current as Model);
}
else
{
modelBindingSource.DataSource = obj;
db2.Models.Attach(modelBindingSource.Current as Model);
}
}
private void FormModel_FormClosing(object sender, FormClosingEventArgs e)
{
if (DialogResult == DialogResult.OK)
{
if (string.IsNullOrEmpty(txtModelName.Text))
{
MessageBox.Show("There are empty fields", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Information);
txtModelName.Focus();
e.Cancel = true;
return;
}
db2.SaveChanges();
e.Cancel = false;
}
e.Cancel = false;
}
}
我真的希望有所帮助。祝一切顺利。请原谅我的英语。
【问题讨论】:
-
您将同一项目附加到多个上下文,这是不允许的。这就是你得到错误的方式。更多信息请参考this。
-
感谢您的回复。但我不知道如何在我的情况下解决这个问题。我查看了您的链接,但对我没有帮助。
标签: c# .net sql-server entity-framework ado.net