使用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 ...
随机推荐
- 2015/9/9 js继续学习
var book={ //对象是由花括号括起来的 topic:“JavaScript”://属性“topic”的值是“JavaScript” fat:true: ...
- Swift +AFNetworking3.0 Get
let manager = AFHTTPSessionManager() let url = "http://v.juhe.cn/weather/index" let ," ...
- 有些网站为什么要使用CDN,CDN又是什么呢
如果你有一个小站,经过细心经营,流量慢慢变大,或者你想搞个活动,请求量会比平时多很多.你租的虚拟主机网络可能会被打爆,导致整个网站打开变慢.想扩大带宽却发现独享带宽很贵,这个时候你可以使用CDN. 如 ...
- (Python )控制流语句if、for、while
这一节,我们将学习Python的控制流语句,主要包括if.for.while.break.continue 和pass语句 1. If语句 if语句也许是我们最熟悉的语句.其使用方法如下: x=inp ...
- STL学习之路
本文面向的读者:学习过C++程序设计语言(也就是说学习过Template),但是还没有接触过STL的STL的初学者.这实际上是我学习STL的一篇笔记,老鸟就不用看了. 什么是泛型程序设计 我们可以简单 ...
- css3的学习笔记1
一. 边框 1. border-color border-color是设置边框的颜色.包括border-top-color,border-left-color,border-right-colo ...
- linux里添加locate命令
在linux里使用和find一样的功能 例如 find -name xx 可以yum install mlocate 然后 updatedb 再使用locate xx 来查找xx文件
- Kafka在Centos6.4中的集群搭建
环境要求:三台装有Centos6.4的虚拟机,需要有java1.7以上的环境,需要ZooKeeper环境. 1)从Kafka官网下载Kafka安装包 下载Kafka 2)解压安装包 tar -xzf ...
- JavaScript-创建新数组
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 斯坦福第十七课:大规模机器学习(Large Scale Machine Learning)
17.1 大型数据集的学习 17.2 随机梯度下降法 17.3 微型批量梯度下降 17.4 随机梯度下降收敛 17.5 在线学习 17.6 映射化简和数据并行 17.1 大型数据集的学习