Serviceboy 发表于 2012-12-19 22:29:53

在LINQ-TO-SQL中实现“级联删除”的方法

<div id="cnblogs_post_body">现在假定有两张表tb_Category和tb_Product(它们属于一对多关系),其中Product中的Cid是Category的外键。表结构如下:
http://pic002.cnblogs.com/images/2012/343864/2012112313042528.png
转化成LINQ-TO-SQL之后模型类如下:
http://pic002.cnblogs.com/images/2012/343864/2012112313045826.png
现在如果删除一个Category的话会抛出“外键冲突”等异常——究其原因,在于外键如果引用该主键,那么该主键不应该被删除。
怎么解决呢?LINQ-TO-SQL没有提供类似直接解决方案。我们可以这样做:
一、先从后主:
所谓“先从后主”就是说先把要删除的Category(假设就是第一个Category)下面的所有的Products给删除,最后把Category也删除。代码如下:

<div class="cnblogs_code">using (MyDbContextDataContext dc = new MyDbContextDataContext())         {               var category = dc.tb_Categories.First();               dc.tb_Products.DeleteAllOnSubmit(category.tb_Products);               dc.tb_Categories.DeleteOnSubmit(category);               dc.SubmitChanges();         }
页: [1]
查看完整版本: 在LINQ-TO-SQL中实现“级联删除”的方法