添加

→ 方法参数中有一个有关添加视图模型类型的形参,比如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. mysql 大小写 整理

    mysql字段的值默认不区分大小写,如果有主键的表,主键列就不能插入重复的值(大小写不同) 实验 默认方式创建 CREATE TABLE `t1` ( `ID` varchar(40) CHARACT ...

  2. python学习之路-day7

    本节内容: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 面向对象高级语法部分 静态方法                             ...

  3. FreeBSD_11 - 系统管理——{ Part_5 - ZFS }

    参考資料 http://docs.oracle.com/cd/E37934_01/html/E36658/toc.html https://www.freebsd.org/doc/en_US.ISO8 ...

  4. Android性能优化方法(七)

    Java从JDK1.2版本开始,就把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用. 这里重点介绍一下软引用和弱引用. 如果 ...

  5. 窗口类(Window Class)概述

    windows窗口编程(通常意义上的win32)有几个比较核心的概念:入口函数WinMain.窗口类Window Class.窗口过程.消息处理机制.通用控件.本文主要介绍窗口类的相关概念,包括: 窗 ...

  6. WordPaster-Chrome浏览器控件安装方法

    将WordPaster.crx拖到Chrome扩展面板中安装

  7. border-radius(边框半径)

    可以使用像素来指定border-radius的属性值使角变圆 除了像素,你还可以使用百分比来指定border-radius边框半径的值

  8. Yaf零基础学习总结3-Hello Yaf

    Yaf零基础学习总结3-Hello Yaf 上一次我们已经学习了如何安装yaf了,准备工作做好了之后我们来开始实际的编码了,码农都知道一个经典的语句就是“Hello World”了,今天我们开始入手Y ...

  9. SQLSERVER DBA容易犯的十个错误

    SQLSERVER DBA容易犯的十个错误 翻译自:http://sqlsentry.tv/top-10-administrative-mistakes-on-sql-server/ 除了排名前十的错 ...

  10. win7 64系统安装oracle客户端使用PL/SQL Developer工具

    1)安装Oracle 11g 64位,我用的版本下载地址: http://www.oracle.com/technetwork/database/enterprise-edition/download ...