添加

→ 方法参数中有一个有关添加视图模型类型的形参,比如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实现增删改查服务中的一些通用思路的更多相关文章

  1. Entity Framework DBContext 增删改查深度解析

    Entity Framework DBContext 增删改查深度解析 有一段时间没有更新博客了,赶上今天外面下雨,而且没人约球,打算把最近对Entity Framework DBContext使用的 ...

  2. ASP.NET中使用Entity Framework开发增删改查的Demo(EF增删改查+母版页的使用)

    这里更多的是当作随身笔记使用,记录一下学到的知识,以便淡忘的时候能快速回顾 这里是该项目的第二部分, 第一部分 第二部分(当前部分) 大完结版本 此Demo是新建了一个音乐类型的web,然后使用母版页 ...

  3. Entity FrameWork 5 增删改查 & 直接调用sql语句

    class="brush:csharp;gutter:true;"> #region 1.0 新增 -void Add() /// <summary> /// 1 ...

  4. AppBox升级进行时 - Entity Framework的增删改查

    AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. Entity Framework新增数据 以新增用户为例,作为对比,先来看下使 ...

  5. Entity FrameWork 5 增删改查 & 直接调用sql语句 ?

    #region 1.0 新增 -void Add() /// <summary> /// 1.0 新增 /// </summary> static void Add() { / ...

  6. ES 06 - 通过Kibana插件增删改查ES中的索引文档

    目录 1 document的结构 2 document的常见CRUD操作 2.1 添加商品: 添加文档并建立索引 2.2 查询商品: 检索文档 2.3 修改商品: 替换文档 2.4 修改商品: 更新文 ...

  7. 映射文件中增删改查标签中的parameterType和resultType

    parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中. resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射 ...

  8. Android 系统API实现数据库的增删改查和SQLite3工具的使用

    在<Android SQL语句实现数据库的增删改查>中介绍了使用sql语句来实现数据库的增删改查操作,本文介绍Android 系统API实现数据库的增删改查和SQLite3工具的使用. 系 ...

  9. Mysql学习笔记(三)对表数据的增删改查。

    正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...

随机推荐

  1. 管道导致的while循环体变量失效

    #!/bin/sh num= cat /etc/passwd | while read line do num=$(($num+)) done echo $num linux:~ # sh a.sh ...

  2. UICollectionView进阶练习

    上一篇中的干货看完,不觉感觉还是有点虚,今天我们来点实的,做了两个小DEMO,源码已放GitHub,主要是针对UICollectionView做了联系.第一个DEMO是针对UICollectionVi ...

  3. Linux部署apache

    一.我们使用源码安装 官网:https://httpd.apache.org/文档:https://httpd.apache.org/docs/2.4/ 下载源码包 httpd-2.4.20.tar. ...

  4. jsp_包含指令

    1.静态包含: <%@ include file="被包含的文件的路径"%> 2.动态包含: 不传递参数:<jsp:include page="{要包含 ...

  5. java中this用法总结

    1,当局部变量和成员变量重名的时候,在方法中使用this表示成员变量以示区分. class Demo{ String str = "这是成员变量"; void fun(String ...

  6. Android Studio签名打包的两种方式

    签名打包的两种方式: 注:给我们自己开发的app签名,就代表着我自己的版权,以后要进行升级,也必须要使用相同的签名才行.签名就代表着自己的身份(即keystore),多个app可以使用同一个签名. 如 ...

  7. step by step 之餐饮管理系统四(日志模块实现)

    三天前基本上把数据库表设计的文档写好,今天想到了一个问题,还要再加几个表,一个是log表,用来记录系统日志,另外再加几个字典表,一些需要配置的数据但又不好放在像xml文件里面的数据可以放在这些字典表里 ...

  8. C语言itoa()函数和atoi()函数详解(整数转字符C实现)

    1.int/float to string/array: C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明. ● itoa():将 ...

  9. 安装windows git客户端

    从git官网下载安装包,双击安装,一路默认配置,直到完成 打开git bash,运行 ssh-keygen -t rsa -C "573215750@qq.com" 回车,输入“y ...

  10. Android View 如何测量

    对于Android View的测量,我们一句话总结为:"给我位置和大小,我就知道您长到那里". 为了让大家更好的理解这个结论,我这里先讲一个日常生活中的小故事:不知道大家玩过&qu ...