添加

→ 方法参数中有一个有关添加视图模型类型的形参,比如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. Web大规模高并发请求和抢购的解决方案

    电商的秒杀和抢购,对我们来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要.这次我们 ...

  2. 再详细的介绍一下Unity5的AssetBundle

    之前曾经写了一篇博客介绍Unity5的AssetBundle,结果似乎很受关注.不过似乎很多人看了之后都不懂,主要是因为不太明白AssetBundle是什么,它的依赖关系和结构是什么的,就直接想拿代码 ...

  3. spring随想

    //不定时持续更新 1.拦截器通过配置文件,在某方法前后添加一些处理,如权限判断等,减少了改方法需要处理的事,是其更专注,由配置文件来设定责任链,更灵活,而且责任链能够复用(一方面是这样能由sprin ...

  4. 在NopCommerce中启用MiniProfiler

    MVC MiniProfiler是Stack Overflow团队设计的一款对ASP.NET MVC.WebForm 以及WCF 的性能分析的小程序.可以对一个页面本身,及该页面通过直接引用.Ajax ...

  5. GitLab的Gravatar头像服务不可用

    由于www.gravatar.com在国内不可正常使用,导致我们搭建的GitLab在网页上会阻塞大量时间,并最终无法显示头像.我们可以将其替换成"多说"的头像服务.我使用的是CE ...

  6. VB.NET读取Excel工作表信息

    Dim dt As DataTable = ExcelConn.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Tables, Nothing)

  7. redis-cli 命令总结

    redis-cli 命令总结 Redis提供了丰富的命令(command)对数据库和各种数据类型进行操作,这些command可以在Linux终端使用.在编程时,比如使用Redis 的Java语言包,这 ...

  8. Cocos2d-x v3.6制作射箭游戏(二)

    原文 Cocos2d-x v3.6制作射箭游戏(二) 六 24, 2015by RENSHANin COCOS2D-X 上章我们创建并加载了游戏地图,接下来的两章我们将实现如下的效果. 在开始之前,先 ...

  9. 怎么定义 logger

    随便打开一个 spring 的 源文件,比如  PathMatchingResourcePatternResolver.class 里面是这样定义logger 的 import org.apache. ...

  10. ORACLE_簽核PROC帶游標

    CREATE OR REPLACE PROCEDURE SP_C_TXYYMM(VAPPLY_NO IN VARCHAR2,VUSER_NM IN VARCHAR2,VFAC_NO IN VARCHA ...