EF架构~为IEnumerable接口添加增删查等操作,原因是IEnumerable导航属性更放心
回到目录
对EF开发来说,导航属性肯定都用过,事实上,它是由VS IDE工具根据你的数据库关系结构自动生成的外键属性,在类视图中可以看到相关属性,它是以外键表名来标识的,如果是一对多的关系,那么,它会为属性加上ICollection泛型集合用来标识,而今天我们要说的当然不是自动生成的,而是手动加的属性,这样属性需要我们手动进行join,然后把它按需赋值,而使用include当然是无效的,呵呵。
一般地,我们习惯上把集合属性定义为List<T>,但是,对于linq to entities来说,这个东西并不是很受欢迎,而标准结果集大家都知道是IEnumerable<T>,它是所有集合的基类,自身只提供了集合遍历的方法,这也是我们不用它作为导航属性的原因,因为我们一般需要为导航集合赋值的,而使用IEnumerable赋值就比较麻烦,需要借助List等集合。
引入IEnumerable的原因主要是List无法实现一个复杂的查询,如图:
这个查询返回一个派生类型,下面的复杂查询将会用到上面的结果,而这时,List类型的导航属性将是不被允许的
我们通过监视器可以看到,查询返回的默认是IEnumerable,所以,我们要属性改为IEnumerable,结果当然是正常的
而我们之前不用IEnumerable的原因,就是因为它的方法太单调了,没有添加,移除,查找等方法,而这时,不用它又不行,所以,只能把它进行扩展了,呵呵
扩展方法如下:
/// <summary>/// IEnumerable接口的扩展方法,支持它的实现类是List的情况/// </summary>public static class IEnumerableExtensions{/// <summary>/// 向集合中添加元素/// </summary>/// <typeparam name="T"></typeparam>/// <param name="collection"></param>/// <param name="value"></param>public static void Add<T>(this IEnumerable<T> collection, T value){(collection as List<T>).Add(value);}/// <summary>/// 从集合中删除元素/// </summary>/// <typeparam name="T"></typeparam>/// <param name="collection"></param>/// <param name="value"></param>public static void Remove<T>(this IEnumerable<T> collection, T value){(collection as List<T>).Remove(value);}/// <summary>/// 检索集合中是否包含某个元素/// </summary>/// <typeparam name="T"></typeparam>/// <param name="collection"></param>/// <param name="value"></param>/// <returns></returns>public static bool Contains<T>(this IEnumerable<T> collection, T value){return (collection as List<T>).Contains(value);}}
调用也是十分简单,和List类型的一样样,呵呵,舒服!
回到目录
转载于:https://www.cnblogs.com/lori/p/3392876.html
EF架构~为IEnumerable接口添加增删查等操作,原因是IEnumerable导航属性更放心相关推荐
- EF架构~将数据库注释添加导入到模型实体类中
回到目录 相关文章系列 第八回 EF架构~将数据库注释添加导入到模型实体类中 第二十一回 EF架构~为EF DbContext生成的实体添加注释(T4模板应用) 第二十二回 EF架构~为EF Db ...
- 【TcaplusDB知识库】GO快速上手PB表的增删查改操作
PROTOBUF说明 PROTO表是基于PROTOBUF协议设计的TcaplusDB表,PROTOBUF协议是Google开源的通用RPC通信协议,用于TcaplusDB存储数据的序列化.反序列化等操 ...
- 火山视窗文本数组类增删查改操作
本源码转载自利快云https://www.lkuaiy.com/ 火山视窗文本数组类增删查改操作 文本数组类可对文本型数据进行数组操作,本类可以非常方便的实现对文本数组的增删查改. 一.添 ...
- 火山视窗整数数组类增删查改操作
本源码转载自利快云https://www.lkuaiy.com/ 火山视窗整数数组类增删查改操作 整数数组类可对整数数据进行数组操作,本类可以非常方便的实现对整数数组的增删查改. 一.添加 ...
- java调用js查询mongo_MongoDB增删查改操作示例【基于JavaScript Shell】
本文实例讲述了MongoDB增删查改操作.分享给大家供大家参考,具体如下: MongoDB自带了一个JavaScript Shell,所以在其中使用js语法是可以的. Insert操作: 单条插入 v ...
- C++通过ODBC方式连接数据库SQLServer及增删查改操作【图书借阅系统为例】
C++通过ODBC方式连接数据库SQLServer及增删查改操作[图书借阅系统为例] 文章目录 前言 一.ODBC如何配置 二.SQL Server如何设置账号密码 三.C++连接数据库以及增删查改操 ...
- 【MySQL】数据库中表的增删查改操作详解
文章目录 前言 SQL的通用语法 一.表的创建与表的新增 语法 数据类型的介绍 演示 二.表的删除 语法 删整张表的语法 删记录的语法 演示 三.表的查询 查询整张表 (一)全列查询 (二)指定列查询 ...
- Hibernate一对多/多对一关系映射详解及相应的增删查改操作
以客户与订单的关系为例 1.在实体模型类中绑定两者关系: 客户类: public class Customer {private Integer id;//客户idprivate String nam ...
- 数据结构C语言实现顺序表——增删查改操作实现详解
顺序表 顺序表是什么? 顺序表是将元素顺序地存放在一块连续的存储区里,元素间的顺序关系由它们的存储顺序自然表示.实现增删查改的功能. 顺序表所需的头文件: #include<stdio.h> ...
最新文章
- (转)二叉树系列面试问题
- Note:HTTP服务器是如何实现对PHP支持的
- 人工智能70年,研究者们最不愿意面对的惨痛教训是……
- linux中Daemon守护进程编程
- [vue] vue如何监听键盘事件?
- [css] 说说你对媒体查询的理解
- 07 | 链表(下):如何轻松写出正确的链表代码?
- JSTL标签库中fmt标签,日期,数字的格式化
- (62)Verilog HDL模块例化system Verilog模块
- Let’ s Encrypt 现支持通配符的 HTTPS 认证
- 双“11”搞促销?用贪心算法盘它
- 从ASP.NET的PHP执行速度比较谈起
- Windows下React Native开发01 -- Android开发环境搭建
- 【李宏毅2020 ML/DL】P4 Basic Concept
- Scrum中的软件测试指南
- 广工学生“纯手工”打造赛车 将出征F1赛道
- 5、LATEX-algorithm2e伪代码中文模板
- 淘宝商家如何在得物做推广?得物推广有效果吗?
- python读xml文件生成.h头文件_Python创建xml文件示例
- 【屏蔽贴吧广告】贴吧广告屏蔽办法-解决方案 【普通用户 非会员】
热门文章
- Java中四种访问修饰符的区别
- imagepreview使用案例_微信小程序wx.previewImage预览图片实例详解
- 将文本计算机应用能力的样式设置为标题1,计算机应用基础期末考试试题
- 策划文档html,html代码整理.doc
- 你会怎样衡量你的产品? —— 一点产品数据分析的经验分享
- 2019春第十周作业
- 解决ntp的错误 no server suitable for synchronization found
- Servlet应用之细节
- mongodb中分页显示数据集的学习
- C# HttpRequest基础连接已经关闭: 接收时发生意外错误