我使用了外键
点击删除按钮后
运行MessageBox.Show(“Error”);
因为它是外键
点击删除按钮后
我不想插入表格
再次给出相同的错误,删除
从不 我无法插入或更新表格
再次给出相同的错误,删除
如何解决问题
代码删除
private void button1_Click(object sender, EventArgs e)
{
try
{
int del = Convert.ToInt32(dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value);
T1 query = (from p in db.T1 where p.id == del select p).FirstOrDefault();
db.T1.Remove(query);
db.SaveChanges();
fill();
}
catch
{
MessageBox.Show("Error");
}
}
代码插入
try
{
db.T1.Add(new T1()
{
names=textBox1.Text
});
db.SaveChanges();
//fill();
}
catch
{
MessageBox.Show("Error");
}
类代码优先
public partial class T1
{
public T1()
{
this.T2 = new List<T2>();
}
public int id { get; set; }
public string names { get; set; }
public virtual ICollection<T2> T2 { get; set; }
}
public partial class T2
{
public int Id { get; set; }
public Nullable<int> fname { get; set; }
public virtual T1 T1 { get; set; }
}
答案 0 :(得分:0)
我假设您尝试删除的T1
对象在其集合中也有T2
个对象(正如您所说我使用了外键)。所以第一个问题,删除,可能是由
T1 t1 = db.T1.FirstOrDefault(p => p.id == del);
// Same as your code, just other syntax, or: db.T1.Find(del);
foreach(var t2 in t1.T2.ToList())
{
db.T2.Remove(t2);
}
db.T1.Remove(t1);
db.SaveChanges();
第二个错误可能是由于您有一个DbContext
实例(db
)。第二次尝试保存时,db
会再次尝试提交之前失败的删除,但仍然在那里。 (如果你发现异常,而不是吞咽它,你可以证实这一点)。您的删除和插入操作应该都使用您在using
构造中新建的自己的上下文实例:
using(var db = new MyContext())
{
// do stuff.
}
附注:
catch(Exception exception)
而不只是显示消息框。(我必须承认我没有看你的链接,我希望这会让你走上正轨)。