linq级联删除的方法是什么
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍"linq级联删除的方法是什么",在日常操作中,相信很多人在linq级联删除的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"linq级联删除的
千家信息网最后更新 2025年01月19日linq级联删除的方法是什么
这篇文章主要介绍"linq级联删除的方法是什么",在日常操作中,相信很多人在linq级联删除的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"linq级联删除的方法是什么"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
级联删除(cascading deletes)从父表中删除外键时也会删除子表中的行。如果在一个表的主键列上删除了一些行,那么在启用级联删除的情况下,将在相关表的任何外键列上删除相同信息。
/// /// 级联删除(从父表中删除外键时也会删除子表中的行) /// /// /// /// public static void CascadingDeletes(T TEntity) where T : class // where T : INotifyPropertyChanging, INotifyPropertyChanged { var _type = TEntity.GetType(); var _prop = _type.GetProperties(); //查找是否有"AssociationAttribute"标记的属性(Linq中有"AssociationAttribute"标记的属性代表外表) var _assolist = _prop.Where( c => c.GetCustomAttributes(true).Any( a => ((Attribute)a).GetType().Name == "AssociationAttribute") & c.PropertyType.IsGenericType);//该属性必需是泛型 //其他表有外键关联的记录 if (_assolist.Count() > 0) { foreach (var _asso in _assolist) { var _items = _asso.GetValue(TEntity, null); var _tItems = _items.GetType(); var _item = _tItems.GetProperty("Item"); var _tItem = _item.PropertyType; var _countProp = _tItems.GetProperty("Count");//获取泛型中的属性"Count" if (_countProp == null) throw new Exception("Cannot find the property 'Count' in " + _items.ToString()); var _count = (int)_countProp.GetValue(_items, null);//获取关联记录的数量 for (int i = 0; i < _count; i++) { var _value = _item.GetValue(_items, new object[] { i }); CascadingDeletes(_value);//删除其他表有外键关联的记录 } } } try { DeleteByName(TEntity);//删除没外键关联的记录 } catch (Exception ex) { throw ex; } }
我在用更通俗的语言为大家介绍一下什么时级联删除:例如员工表中一项数据是部门ID,部门ID是部门表的主键,如果是级联删除,当删除了部门A的时候,会把所有属于部门A的员工都给删除。Linq级联删除因为Linq语言的复杂性,就会让人感到更难实现。下面继续上述代码实现Linq级联删除。
public static void DeleteByName(T TEntity) where T : class { var type = TEntity.GetType(); var table = TableFactory.CreateTable(type ); table.DeleteOnSubmit(TEntity); //Console.WriteLine("Delete:"+ TEntity.ToString()); } public static class TableFactory { public static System.Data.Linq.Table CreateTable() where T : class { return Database.NWDB.GetTable(); } public static System.Data.Linq.ITable CreateTable (Type t) { return Database.NWDB.GetTable(t); } } public static class Database { private static DLinq.NWDBDataContext _NWDB = null; public static DLinq.NWDBDataContext NWDB { get { if (_NWDB == null) _NWDB = new DLinq.NWDBDataContext(); return _NWDB; } } }
到此,关于"linq级联删除的方法是什么"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
方法
部门
属性
关联
学习
员工
更多
标记
语言
帮助
复杂
实用
相同
通俗
接下来
代码
代表
信息
复杂性
外表
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
中国大学生网络安全排名
男朋友电话总是无法接通服务器
值得信任的定制软件开发
网络安全套件是什么
学生如何保护自身网络安全
公益广告网络安全为人民
北极熊工作室软件开发
四川中小学生道德与网络安全
我与我的专业软件开发作文
四川ipfs云服务器云主机
乐视手机刷机了无法连接服务器
apex显示服务器未响应
通信网络技术专业是什么类
数据库财务软件官方正式版
家里多个电脑安装网吧服务器
湖州安卓软件开发
文件服务器需要独显吗
软件开发是应税服务么
网络安全知识与文明意识
网络安全 官方翻译
服务器的线程数
如何将表格转换成数据库
网络技术专业专业结构分布
2018网络安全技术教程
战地5中国有服务器吗
sdap过敏原数据库
易语言mysql插入数据库
易淘无限网络技术有限公司
长宁区综合软件开发技术指导
乐视手机刷机了无法连接服务器