使用Enitity Framework实现增删改查服务中的一些通用思路
添加
→ 方法参数中有一个有关添加视图模型类型的形参,比如vm
→ 根据vm的某个属性,比如Name判断在上下文中是否存在,如果不存在就抛EntityNotFoundException异常
→ 判断vm所依赖的外键那对应的那个实体是否存在,比如vm中有各PoductCategoryId外键,就判断下上下文中的ProductCategory是否存在,不存在就抛EntityNotFoundException异常
→ 关于1对多关、多对多关系
更新
→ 方法参数中有一个有关更新视图模型的形参vm,还有一个主键,比如id
→ 根据id判断在上下文中是否存在,如果不存在就抛EntityNotFoundException异常
→ 判断上下文中的实体是否逻辑删除,如果已经存在就抛Exception异常
→ 判断上下文中的实体的其它键是否和方法中的其它形参相等,如果不等,抛EntityNotFoundException异常。比如vm中有一个SupplierId, 形参中有一个supplierId,如果不相等,就说明不是当前供应商的产品,当然要抛异常
→ 判断上下文中的实体是否可编辑,通常视图通过实体的一个字段来判断,比如Product这个领域模型有CheckState属性,是枚举类型,当在审核中的时候,就不允许编辑。如果实体当前的状态是不允许编辑,那即抛Exception异常
→ 判断视图模型中的某个字段和上下文中的实体中的该字段是否不等,如果不能在判断视图模型中该字段值是否在上下文中存在
if(vm.Name != product.Name)
{
if(await ProductExist(vm.Name))
{
throw new EntityAlreadyExistException("");
}
}
→ 处理一对多,多对多关系
根据主键获取
→ 根据主键判断上下文实体是否存在,不存在就EntityNotFoundException异常
→ 判断上下文实体是否处于逻辑删除状态,如果是抛Exception异常
获取所有
→ 拿到IQueryable类型的一个集合
→ 拿到集合元素数量
→ 基于所有字段的的过滤
→ 基于每个字段的过滤
→ 拿到过滤后集合元素数量
→ 排序
→ 分页,Skip, Take
→ 转换成视图模型
删除
→ 判断要删除的,在上下文中是否存在,不存在就抛EntityNotFoundException异常
→ 判断该实体是否有依赖,有依赖就抛EntityDependencyException异常
→ 实施逻辑删除或物理删除
总结
● 判断视图模型中外键对应的实体是否存在,易忽略
● 判断是否逻辑删除,易忽略
● 判断是否允许编辑,易忽略
使用Enitity Framework实现增删改查服务中的一些通用思路的更多相关文章
- Entity Framework DBContext 增删改查深度解析
Entity Framework DBContext 增删改查深度解析 有一段时间没有更新博客了,赶上今天外面下雨,而且没人约球,打算把最近对Entity Framework DBContext使用的 ...
- ASP.NET中使用Entity Framework开发增删改查的Demo(EF增删改查+母版页的使用)
这里更多的是当作随身笔记使用,记录一下学到的知识,以便淡忘的时候能快速回顾 这里是该项目的第二部分, 第一部分 第二部分(当前部分) 大完结版本 此Demo是新建了一个音乐类型的web,然后使用母版页 ...
- Entity FrameWork 5 增删改查 & 直接调用sql语句
class="brush:csharp;gutter:true;"> #region 1.0 新增 -void Add() /// <summary> /// 1 ...
- AppBox升级进行时 - Entity Framework的增删改查
AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. Entity Framework新增数据 以新增用户为例,作为对比,先来看下使 ...
- Entity FrameWork 5 增删改查 & 直接调用sql语句 ?
#region 1.0 新增 -void Add() /// <summary> /// 1.0 新增 /// </summary> static void Add() { / ...
- ES 06 - 通过Kibana插件增删改查ES中的索引文档
目录 1 document的结构 2 document的常见CRUD操作 2.1 添加商品: 添加文档并建立索引 2.2 查询商品: 检索文档 2.3 修改商品: 替换文档 2.4 修改商品: 更新文 ...
- 映射文件中增删改查标签中的parameterType和resultType
parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中. resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射 ...
- Android 系统API实现数据库的增删改查和SQLite3工具的使用
在<Android SQL语句实现数据库的增删改查>中介绍了使用sql语句来实现数据库的增删改查操作,本文介绍Android 系统API实现数据库的增删改查和SQLite3工具的使用. 系 ...
- Mysql学习笔记(三)对表数据的增删改查。
正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...
随机推荐
- 20145225《Java程序设计》实验一 Java开发环境的熟悉(Linux + Eclipse)
20145225<Java程序设计> 实验一 Java开发环境的熟悉(Linux + Eclipse) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑 ...
- C# 字符串替换Replace
C# 中的石strA.Replace(strB,strC)函数可以实现将strA中的strB替换为strC. 但是容易出错的地方是,这并不是就直接替换好了,此函数的返回值才是替换好的字符串,所以还要要 ...
- Having关键字
Having关键字:用于对整组整组地过滤(对比,where仅仅是一行一行地过滤.) 查询每个住址各住多少人? 查询住址的会员人数超过2人的住址. 注意,出现顺序where>group by> ...
- 【二分答案】【贪心】bzoj3969
http://www.cnblogs.com/mmlz/p/4497118.html #include<cstdio> #include<algorithm> using na ...
- js 根据年月获取当月有多少天_js获取农历日期_及Js其它常用有用函数
//根据年月获取当月有多少天 function getDaysInMonth(year, month) { debugger; //parseInt(number,type)这个函数后面如果不跟第2个 ...
- Windows操作系统消费者价值亮点
在讨论Windows操作系统之前,我们先看看消费者是什么. 消费者是产品和服务的最终使用者 ,其购买商品的目的主要是用于个人或家庭需要. 那么消费者的需求是什么,是使用,所以谁能给消费者更好的使用体验 ...
- DM9000网卡驱动接受数据从中断方式改成NAPI方式小记
平台是最最经典的s3c2440了,说了要做这件事情很久了,就是改几行代码,一直没有做.前几天逼了自己一下,终于给做了,拖延症患者伤不起. 以下是需要读者对napi机制有所熟悉: step1:在boar ...
- Unity3D研究院之使用Animation编辑器编辑动画(五十四)
Unity提供了Animation编辑器,它可以为我们编辑物理动画.举个例子比如场景中有一个来回摇动的秋千,这个秋千在项目中完全只起到衬托作用,它不会与别的游戏对象有任何交互.如果这个秋千也用代码来 ...
- C#执行OracleHelper
/// <summary> /// 执行存储过程获取带有Out的参数 /// </summary> /// <param name="cmdText" ...
- Dynamic CRM 2013学习笔记(十)客户端几种查询数据方式比较
我们经常要在客户端进行数据查询,下面分别比较常用的几种查询方式:XMLHttpRequest, SDK.JQuery, SDK.Rest. XMLHttpRequest是最基本的调用方式,JQuery ...