在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的话会抛出&ldquo;外键冲突&rdquo;等异常&mdash;&mdash;究其原因,在于外键如果引用该主键,那么该主键不应该被删除。
怎么解决呢?LINQ-TO-SQL没有提供类似直接解决方案。我们可以这样做:
一、先从后主:
所谓&ldquo;先从后主&rdquo;就是说先把要删除的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]