📚
Hoa Framework
  • 一、框架指南
  • 二、功能特性
  • 三、源码结构
  • 四、代码规范
  • 五、入门指南
  • 六、依赖注入/控制反转
  • 七、控制器和服务
  • 八、对象映射指南
  • 九、数据库操作指南
    • 9.1、正向工程(Code First)
    • 9.2、逆向工程(Database First)
    • 9.3、关于仓储(IRepository)
    • 9.4、增删改操作
    • 9.5、查询操作
    • 9.6、DataSet、DataTable 操作
    • 9.7、查询结果集映射
    • 9.8、批量增删改操作
    • 9.9、存储过程、视图、函数操作
    • 9.10、工作单元和事务
    • 9.11、多上下文、读写分离
    • 9.12、切面上下文(TangentDbContext)
    • 9.13、其他操作
    • 9.14、EF Core 高性能
    • 9.15、常见错误
  • 十、开放接口指南
    • 10.1、RESTFul 和 Swagger
    • 10.2、规范化返回值
  • 十一、数据校验
  • 十二、安全授权
  • 十三、异常处理
  • 十四、日志管理
  • 十五、配置管理
  • 十六、缓存管理
  • 十七、内置工具类
    • 17.1、数据加解密
  • 十八、跨域处理
  • 十九、筛选拦截器(未)
  • 二十、进程服务(Daemon)
  • 二十一、编写测试
    • 20.1、单元测试
    • 20.2、基准测试
    • 20.3、性能测试
  • 二十二、托管部署
    • 22.1、IIS 托管部署
    • 22.2、Nginx 托管部署
    • 22.3、Docker 容器部署
  • 二十三、性能分析(MiniProfiler)
  • 二十四、其他功能
    • 23.1、第三方包管理
    • 23.2、文件上传下载
    • 23.3、Razor 视图引擎
    • 23.4、生成客户端请求代码
    • 23.5、快捷操作
  • 二十五、Docker 容器化
    • 25.1、Docker 介绍
    • 25.2、Docker 安装
    • 25.3、Docker 安装服务
    • 25.4、Docker 常用命令
    • 25.6、Docker run 常用命令
    • 25.7、Docker-Compose 介绍
    • 25.8、docker-compose.yml
    • 25.9、Docker-Compose 常用命令
    • 25.10、Docker-Compose 转换 docker run
    • 25.11、Docker 构建自己的镜像
    • 25.12、Dockerfile指南
    • 25.13、Dockerfile 常用命令
    • 25.14、Dockerfile 打包、上传、分享
    • 25.15、Docker 数据卷
    • 25.16、Docker 域网络
    • 25.17、Docker + Nginx 实现分布式集群、负载均衡
  • 二十六、DevOps 持续部署集成
    • 26.1、DevOps 介绍
    • 26.2、持续集成、交付、部署
    • 26.3、Jenkins 介绍
    • 26.4、Jenkins 安装
    • 26.5、Jenkins 初始化
    • 26.6、Jenkins 实战演练
    • 26.7、Jenkis 项目配置
    • 26.8、Jenkins 插件
  • 二十七、OpenXml/Excel 操作
  • 二十八、SaaS 多租户
  • 二十九、Git 代码管理
    • 29.1、Git 介绍
    • 29.2、Git 安装
    • 29.3、Git 基础配置
    • 29.4、Git 工作流程
    • 29.5、Git 重要概念
    • 29.6、Git 创建仓库
    • 29.7、Git 基本操作
    • 29.8、Git 分支管理
    • 29.9、Git 查看提交历史
    • 29.10、Git 标签
    • 29.11、Git 拉取/获取/推送
    • 28.12、Git GUI工具
    • 29.13、Git 私有化部署
    • 29.14、Git 推荐开发模式
    • 29.15、Svn 转 Git
  • 贡献代码
  • 更新日志
由 GitBook 提供支持
在本页
  • 新增操作
  • 新增一条数据,无需返回(推荐)
  • 新增一条数据,并立即返回新增实体(推荐)
  • 新增多条数据,无需返回
  • 新增多条,并立即返回新增实体集合
  • 异步新增
  • 补充说明
  • 更新操作
  • 更新所有列,先查询实体
  • 更新指定列,先查询实体
  • 更新所有列,无需查询
  • 更新指定列,无需查询
  • 更新所有列,先查询实体,并立即执行
  • 更新多条实体,先查询出全部实体
  • 更新多条实体,先查询出全部实体,并立即执行
  • 补充说明
  • 删除操作
  • 根据主键Id删除
  • 根据主键Id删除,并立即执行
  • 根据查询的实体删除
  • 根据查询的实体删除,并立即执行
  • 根据多条已查询的实体删除
  • 根据多条已查询的实体删除,并立即执行
  • 补充说明
  • 假删除/软删除
  • 根据主键Id假删除
  • 根据主键Id假删除,并立即执行
  • 根据条件假删除
  • 根据条件假删除,并立即执行
  • 补充说明
  • 新增或更新
  • 新增或更新
  • 补充说明

这有帮助吗?

  1. 九、数据库操作指南

9.4、增删改操作

数据增删改是我们与应用系统使用者最直接的心灵沟通方式。

新增操作

新增一条数据,无需返回(推荐)

// 方式一,推荐
_testRepository.Insert(new TestEntity()
    {
        Name = "Monk",
        CreatedTime = DateTime.Now
    });

// 方式二
_testRepository.Entity.Add(new TestEntity()
    {
        Name = "Monk",
        CreatedTime = DateTime.Now
    });

新增一条数据,并立即返回新增实体(推荐)

// 方式一,推荐
var newEntity = _testRepository.InsertWithSaveChanges(new TestEntity()
    {
        Name = "Monk",
        CreatedTime = DateTime.Now
    });
var newId = _testRepository.Id; // 最新Id

// 方式二
var newEntity = _testRepository.Entity.Add(new TestEntity()
    {
        Name = "Monk",
        CreatedTime = DateTime.Now
    });
_testRepository.SaveChanges();
var newId = _testRepository.Id;

新增多条数据,无需返回

var addEntities = new List<TestEntity>(){
    new TestEntity()
    {
        Name = "Monk",
        CreatedTime = DateTime.Now
    },
    new TestEntity()
    {
        Name = "MonkSoul",
        CreatedTime = DateTime.Now
    },
};
_testRepository.Insert(addEntities);

新增多条,并立即返回新增实体集合

var addEntities = new List<TestEntity>(){
    new TestEntity()
    {
        Name = "Monk",
        CreatedTime = DateTime.Now
    },
    new TestEntity()
    {
        Name = "MonkSoul",
        CreatedTime = DateTime.Now
    },
};
_testRepository.InsertWithSaveChanges(addEntities);

异步新增

await _testRepository.InsertAsync(new TestEntity()
    {
        Name = "Monk",
        CreatedTime = DateTime.Now
    });

补充说明

新增操作包含两种:

  1. Insert

  2. InsertWithSaveChanges

它们的主要区别在于是否立即调用了 dbContext.SaveChanges() 方法。

更新操作

更新所有列,先查询实体

var entity = _testRepository.Find(1);
entity.Name = "MonkSoul";
entity.Age = 27;

这种方式,无需调用 _testRepository.Update(entity) 和 _testRepository.SaveChanges()方法。但是会生成更新所有列的 Sql

更新指定列,先查询实体

var entity = _testRepository.Find(1);
entity.Name = "MonkSoul";
entity.Age = 27;
_testRepository.SetModifyProperties(specEntity,
                                               u => u.Name,
                                               u => u.Age);

这种方式,无需调用 _testRepository.Update(entity) 和 _testRepository.SaveChanges()方法。但是会生成更新指定列的 Sql,比如这里是 Name 和 Age 两个属性

更新所有列,无需查询

var entity = new Entity { Name ="Monk", Age = 27, Id = 1};
_testRepository.EntityEntryState(entity) =  EntityState.Modified;

注意:必须包含主键 Id

更新指定列,无需查询

var entity = new Entity { Name ="Monk", Age = 27, Id = 1};
_testRepository.Context.Attach(entity);
_testRepository.SetModifyProperties(entity,
                                           u => u.Name,
                                           u => u.Age);

注意:必须包含主键 Id

更新所有列,先查询实体,并立即执行

var entity = _testRepository.Find(1);
entity.Name = "MonkSoul";
entity.Age = 27;

_testRepository.UpdateWithSaveChanges(entity);

更新多条实体,先查询出全部实体

var entities = _testRepository.GetAll(u = > u.Id > 100);
foreach(var entity in entities){
    entity.Age = entity.Age + 1;
}

这种方式,无需调用 _testRepository.Update(entity) 和 _testRepository.SaveChanges()方法。

更新多条实体,先查询出全部实体,并立即执行

var entities = _testRepository.GetAll(u = > u.Id > 100);
foreach(var entity in entities){
    entity.Age = entity.Age + 1;
}
_testRepository.UpdateWithSaveChanges(entities);

补充说明

更新操作包含两种:

  1. Update

  2. UpdateWithSaveChanges

它们的主要区别在于是否立即调用了 dbContext.SaveChanges() 方法。

删除操作

根据主键Id删除

_testRepository.Delete(1);

根据主键Id删除,并立即执行

_testRepository.DeleteWithSaveChanges();

根据查询的实体删除

var entity = _testRepository.Find(1);
_testRepository.Delete(entity);

根据查询的实体删除,并立即执行

var entity = _testRepository.Find(1);
_testRepository.DeleteWithSaveChanges(entity);

根据多条已查询的实体删除

var entities = _testRepository.GetAll(u = > u.Id > 100);
_testRepository.Delete(entities);

根据多条已查询的实体删除,并立即执行

var entities = _testRepository.GetAll(u = > u.Id > 100);
_testRepository.DeleteWithSaveChanges(entities);

补充说明

删除操作包含两种:

  1. Delete

  2. DeleteWithSaveChanges

它们的主要区别在于是否立即调用了 dbContext.SaveChanges() 方法。

假删除/软删除

根据主键Id假删除

_testRepository.FakeDelete(1, u => u.Void, 0);

根据主键Id假删除,并立即执行

_testRepository.FakeDeleteWithSaveChanges(1, u => u.Void, 0);

根据条件假删除

_testRepository.FakeDelete(u => u.Id == 1, u => u.Void, 0);

根据条件假删除,并立即执行

_testRepository.FakeDeleteWithSaveChanges(u => u.Id == 1, u => u.Void, 0);

补充说明

假删除操作包含两种:

  1. FakeDelete

  2. FakeDeleteWithSaveChanges

它们的主要区别在于是否立即调用了 dbContext.SaveChanges() 方法。

新增或更新

新增或更新

_testRepository.InsertOrUpdate(entity);

新增或更新,并立即执行

_testRepository.InsertOrUpdateWithSaveChanges(entity);

补充说明

新增或更新操作包含两种:

  1. InsertOrUpdate

  2. InsertOrUpdateWithSaveChanges

它们的主要区别在于是否立即调用了 dbContext.SaveChanges() 方法。

上一页9.3、关于仓储(IRepository)下一页9.5、查询操作

最后更新于4年前

这有帮助吗?