函数

用递归获取外键关联记录,从最外面一直删到最里面(本身)。

获取外键关联记录的办法是找有AssociationAttribute属性的Property,然后遍历,删除。

1 public static void CascadingDeleteOnSubmit(this DataContext context, object entity)
2 {
3 var entityType = entity.GetType();
4 var entityProperties = entityType.GetProperties();
5 //查找是否有“AssociationAttribute”标记的属性
6 //(Linq中有“AssociationAttribute”标记的属性代表外表)
7   var associationProperties = entityProperties.Where(
8 c => c.GetCustomAttributes(true).Any(
9 attrbute => attrbute.GetType().Name == "AssociationAttribute")
10 & c.PropertyType.IsGenericType);//该属性必需是泛型
11 //其他表有外键关联的记录
12   foreach (var associationProperty in associationProperties)
13 {
14 //获取Property值
15   object propertyValue = associationProperty.GetValue(entity, null);
16 //Property是EntitySet`1类型的值,如EntitySet<DataSetStructure>,
17 //而EntitySet`1有IEnumerable接口
18   IEnumerable enumerable = (IEnumerable)propertyValue;
19 foreach (object o in enumerable)
20 {
21 //递归
22   CascadingDeleteOnSubmit(context, o);
23 }
24 }
25
26 try
27 {
28 //删除没外键关联的记录
29 context.GetTable(entity.GetType()).DeleteOnSubmit(entity);
30 }
31 catch (Exception ex)
32 {
33 throw ex;
34 }
35 }

用法:

1 public virtual string CascadingDelete(string id)
2 {
3 TDataContext context = new TDataContext();
4 TEntity t = context.GetTable<TEntity>().Where(c => c.ID.Equals( id)).First();
5 context.CascadingDeleteOnSubmit(t);
6 context.SubmitChanges();
7 return Constances.ErrorMassage.SUCCEED;
8 }

转载于:https://www.cnblogs.com/zwgg/archive/2011/03/15/1984568.html

Linq级联删除 CascadingDeleteOnSubmit相关推荐

  1. [NHibernate]一对多关系(级联删除,级联添加)

    目录 写在前面 文档与系列文章 一对多关系 一个例子 级联删除 级联保存 总结 写在前面 在前面的文章中,我们只使用了一个Customer类进行举例,而在客户.订单.产品中它们的关系,咱们并没有涉及, ...

  2. Hibernate级联删除提示约束失败DELETE 语句与 REFERENCE 约束FK_SelectCourse_StudentInfo冲突。...

    前台执行删除带约束关系的时候,后台提示错误 Hibernate: delete from Student.dbo.StudentInfo where Snu=? 删除失败! org.hibernate ...

  3. 关于数据的级联删除和更新

    两张表:"ProductCategory","Product". 有一个需求是这样的:在删除某个ProductCategory 的时候,同时删除该Categor ...

  4. [JAVAWEB实战篇]---Hibernate实现级联删除

    Hibernate实现级联删除 版权所有,转载请注明出处zhyiwww@163.com 我的使用背景: v有新闻和新闻类型,一条新闻只能属于一个类型,一种新闻类型可以对应多条新闻. v在数据库中,新闻 ...

  5. Django ORM 级联删除

    在一对多关系中,例如主机对应多个role,每个role对应1个主机, 当删除了某个主机时候,发现对应的role也被删除了,于是查了手册,应该如下写: class Host(models.Model): ...

  6. MySql级联删除和更新

    (一)利用外键实现级联删除 1.先建立测试数据库 [sql] view plaincopy CREATE TABLE `roottb` ( `id` INT(11) UNSIGNED AUTO_INC ...

  7. Nhibernate 多对多级联删除

    在网上找到的方法:查看这里 //-------------------------------------Article.hbm.xml-------------------------------- ...

  8. SQLServer表内自关联级联删除

    今天处理SQLServer级联删除遇到了很蛋疼的事. SQLServer 不支持表内自关联级联删除,而MySql和Oracle却支持. 貌似原因是SQLServer 会产生循环级联,就不给这样弄.所以 ...

  9. mysql创建外键级联更新_MySQL中利用外键实现级联删除、更新

    MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引.在创建索引的时候,可以指定在删除.更新父表时,对子表进行的相应操作 ...

  10. django 多对多表的创建,级联删除,手动创建第三张表

    创建一张作者表,author,创建外键与book表,多对多关系 ,外键字段放在那张表都可以, class Author(models.Model):name = models.CharField(ma ...

最新文章

  1. 《权力的游戏》最终季上线!谁是你最喜爱的演员?这里有一份Python教程 | 附源码...
  2. 【家谱制作1.1】项目启动,系分完成
  3. Manjaro开机黑屏卡住_显卡驱动问题解决及配置源和搜狗输入法安装。
  4. page,client,offset区别
  5. java速学_5分钟快速入门Java,不看真的可惜了
  6. java中属性外部化_用Java可外部化
  7. [html] 跨标签页的通讯方式有哪些
  8. 【Elasticsearch】ElasticSearch里面的偏好查询
  9. 闭包——抽象解释的简单注释
  10. CAD迷你看图 for Mac(MiniCAD)
  11. SIM900A—基础指令
  12. Easy Touch参数
  13. PHP实现输入地址,获取当前位置的经纬度,$lng和$lat即为经纬度的返回值
  14. 一文详解车道线检测技术分析
  15. 四旋翼的运动原理及几个飞行问题
  16. 7种流行PHP编辑器的比较(PHP IDE)
  17. 【Please, upgrade your dependencies to the actual version of cor问题】
  18. Electron客户端实现本地录制功能详解【附代码】
  19. Arm内核的Oops错误定位方法
  20. 元器件 失效分析 过程介绍

热门文章

  1. 管理感悟:区分话的难听与对错
  2. VS找不到System.Web.Extensions.dll的解决办法
  3. iOS锁屏代码注意使用新接口
  4. linux下安装nginx1.10,Linux(RHEL7.0)下安装Nginx-1.10.2
  5. 如何查看注解实现_SpringBoot的注解@ConditonOnClass注解是如何实现的?
  6. linux 程序 监听端口,linux和windows下如何知道端口是被那个程序监听占用?
  7. 2019 序列号_苹果序列号知识扫盲:iPhone序列号含义与查询真伪全攻略
  8. 安卓手机状态栏 定位服务自动关闭_【科普知识】手机多久关机一次?看完才知道白用那么多年手机了!...
  9. pythonfor循环是迭代器吗_Python学习——for循环,生成器,迭代器详解
  10. Golang 大杀器之性能剖析 PProf