在使用Entity Framework一同删除主子表对象时,需要注意的问题:
1.不能直接使用context.Delete(masterobject);会造成其子对象的主键导航属性为null,无法保存。
使用的方法为:先循环删除其子对象
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
int id = (bindingSource1.Current
as Client).ID;
Client model = md.Client.Where(r => r.ID == id).FirstOrDefault();
int count = model.DepartMent.Count;
// 不能一次删除多个,比如md.DeleteObject(model.DepartMent)。
// 或者md.DeleteObject(md.DepartMent.Where(r=>r.Client_ID==model.ID));
// 要一个个的删除。
for ( int i = 0; i < count; i++)
{
md.DeleteObject(model.DepartMent.First());
}
md.DeleteObject(model); // 不能用gridview或是BindingSource的removed方法,他们会删掉该条记录的外间引用对象,造成不能保存
Client model = md.Client.Where(r => r.ID == id).FirstOrDefault();
int count = model.DepartMent.Count;
// 不能一次删除多个,比如md.DeleteObject(model.DepartMent)。
// 或者md.DeleteObject(md.DepartMent.Where(r=>r.Client_ID==model.ID));
// 要一个个的删除。
for ( int i = 0; i < count; i++)
{
md.DeleteObject(model.DepartMent.First());
}
md.DeleteObject(model); // 不能用gridview或是BindingSource的removed方法,他们会删掉该条记录的外间引用对象,造成不能保存
然后再删除主对象。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
md.DeleteObject(model);
//
不能用gridview或是BindingSource的removed方法,他们会删掉该条记录的外间引用对象,造成不能保存
2.在删除时,不能使用数据源或是控件的删除行的方法。否则也会出现导航属性为null的情况。