zoukankan      html  css  js  c++  java
  • 使用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异常
    → 实施逻辑删除或物理删除

    总结

    ● 判断视图模型中外键对应的实体是否存在,易忽略
    ● 判断是否逻辑删除,易忽略
    ● 判断是否允许编辑,易忽略

  • 相关阅读:
    css动画特效
    http标码集合
    vue的搭建项目
    多功能
    react官方脚手架搭建项目
    深入挖掘分析Go代码
    GoLang AST简介
    GoLang中的逃逸分析简介
    使用Golang实现状态机
    GoLang中的Context
  • 原文地址:https://www.cnblogs.com/darrenji/p/5278365.html
Copyright © 2011-2022 走看看