好像CodeProject这个家伙,和我一样走了弯路。在开始应用LINQ时,我对级联删除也和他一样,先取出主表,然后把从表再循环删除。借用下他的代码,我蓝得写了。
try
{
using (NWindDataContext dc = new NWindDataContext())
{
var q =
(from c in dc.GetTable<Customer>()
where c.CustomerID == "AAAAA"
select c).Single<Customer>();
foreach (Order ord in q.Orders)
{
dc.GetTable<Order>().DeleteOnSubmit(ord);
foreach (Order_Detail od in ord.Order_Details)
{
dc.GetTable<Order_Detail>().DeleteOnSubmit(od);
}
}
dc.GetTable<Customer>().DeleteOnSubmit(q);
dc.SubmitChanges();
}
UpdateDataGrid();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
看似这样很合理,但是我们自聪明了,只需要简单的在数据库关联上设置级联就可以了。
![](https://i-blog.csdnimg.cn/blog_migrate/df0d1e60b4522f2839fd21623806245a.png)