update

28810
2020-09-13 19:02:40 +08:00
parent fac954d976
commit 760d80364a
2 changed files with 90 additions and 2 deletions

88
EntityFramework比较.md Normal file

@@ -0,0 +1,88 @@
## 基础信息比较
| 功能项 | EFCore | SqlSugar | FreeSql | 说明 |
| --- | --- | --- | --- | --- |
| 出生时间 | 2015年(约) | 2014年(约) | 2018年12月 | |
| 开源协议 | Apache-2.0 | Apache-2.0 | MIT | |
| 单元测试数量 | 很多 | 无 | 5500+ | |
| github star | 9.5k+ | 3.1k+ | 2.1k+ | |
| github issues | 活跃 | 不活跃 | 活跃 | |
| 支持平台 | .NET Core | .NET Framework 4.5+、.NET Core | .Net Framework 4.0+、.NETCore | |
| 支持数据库 | 很多 | SqlServer/MySql/Sqlite/Oracle | MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/人大金仓/神舟通用/Access | |
| 生命周期 | Scoped | Scoped | Singleton | |
| 使用方式 | DbContext | SugarClient | IFreeSql、DbContext、Repository、BaseEntity、DbConnection(类似 dapper 的扩展方法) | |
## 整体功能比较
| 功能项 | EFCore | SqlSugar | FreeSql | 说明 |
| --- | --- | --- | --- | --- |
| CodeFirst 根据实体类型,创建表结构 | ✔ | ✔ | ✔ | |
| CodeFirst 根据实体类型,对比表结构 | ✔ | - | ✔ | |
| CodeFirst FluentApi | ✔ | - | ✔ | |
| CodeFirst FluentApi 语法兼容 EFCore | ✔ | - | ✔ | |
| CodeFirst 实体特性兼容 EFCore | ✔ | - | ✔ | FreeSql 兼容 EFCore 的实体类特性设置 |
| CodeFirst 自定义实体特性 | - | ✔ | ✔ | |
| 导航属性(OneToOne) | ✔ | - | ✔ | |
| 导航属性(ManyToOne) | ✔ | - | ✔ | |
| 导航属性(OneToMany) | ✔ | - | ✔ | |
| 导航属性(ManyToMany) | - | - | ✔ | |
| 导航属性(Parent) | - | - | ✔ | [父子关系的实体类](https://github.com/2881099/FreeSql/wiki/%e6%9f%a5%e8%af%a2%e7%88%b6%e5%ad%90%e5%85%b3%e7%b3%bb) |
| 自定义表达式树解析 | - | - | ✔ | |
| 全局过滤器 | ✔ | - | ✔ | |
| 事务 | ✔ | ✔ | ✔ | |
| 读写分离 | - | ✔ | ✔ | |
| 分表分库 | - | - | ✔ | |
| 仓储 Repository | - | - | ✔ | |
| 工作单元 UnitOfWork | - | - | ✔ | |
| 工作单元管理器 UnitOfWorkManager | - | - | ✔ | 实现类似 Spring AOP 事务管理 |
| DbContext | ✔ | - | ✔ | FreeSql.DbContext 提供简单的状态管理机制 |
## CRUD 功能比较
| 功能项 | EFCore | SqlSugar | FreeSql | 说明 |
| --- | --- | --- | --- | --- |
| 插入(单条) | ✔ | ✔ | ✔ | |
| 插入时,忽略/指定列 | - | ✔ | ✔ | |
| 插入时,参数化 | ✔ | ✔ | ✔ | 使用参数化生成 SQL 命令执行 |
| 插入时,无参数化 | - | - | ✔ | 不使用参数化生成 SQL 命令执行(已处理注入漏洞) |
| 插入时,获取对应的 SQL | - | ✔ | ✔ | 使用 ToSql 方法获取对应的 SQL |
| 插入时,返回影响的行数 | - | ✔ | ✔ | |
| 插入时,返回插入后的自增值 | ✔ | ✔ | ✔ | |
| 插入时,返回插入后的记录 | - | - | ✔ | SqlServer output inserted 特性、PostgreSQL returning 特性 |
| 插入时,统一审计属性值 | - | - | ✔ | 可实现统一设置实体的属性值 |
| 插入时,改变映射的表名 | - | ✔ | ✔ | |
| 插入时Insert Ignore Into | - | - | ✔ | MySql 的功能 |
| 插入时On Duplicate Key Update | - | - | ✔ | MySql 的功能 |
| 插入时On Conflict Do Update | - | - | ✔ | PostgreSQL 的功能 |
| 批量插入 | - | ✔ | ✔ | [性能测试结果](https://www.cnblogs.com/kellynic/p/10557882.html) |
| 批量插入时,自动分批 | - | - | ✔ | 单次执行 SQL 允许插入的数量,超过会报错,[参考文档](https://github.com/dotnetcore/FreeSql/wiki/%E6%B7%BB%E5%8A%A0#2%E6%89%B9%E9%87%8F%E6%8F%92%E5%85%A5) |
| 批量插入时使用BulkCopy | - | - | ✔ | |
| 更新(单条) | ✔ | ✔ | ✔ | |
| 更新时,动态条件 | - | ✔ | ✔ | 主键值、new[] { 主键值1, 主键值2 }、实体对象、new[] { 实体对象1, 实体对象2 }、new { id = 1 } |
| 更新时,传入实体对象 | - | ✔ | ✔ | 根据实体对象更新 |
| 更新时,只更新实体对象有变化的属性 | ✔ | - | ✔ | 根据状态管理更新 |
| 更新时,忽略/指定列 | - | ✔ | ✔ |
| 更新时,原子性 set num=num+1 | - | ✔ | ✔ | |
| 更新时,指定条件 | - | ✔ | ✔ | |
| 更新时,自动附加全局过滤器条件 | - | - | ✔ | |
| 更新时,不需要先查询数据 | - | ✔ | ✔ | |
| 更新时,使用乐观行锁 | ✔ | - | ✔ | |
| 更新时,使用悲观锁 | - | - | ✔ | select * from tb where id = 1 for update |
| 更新时,返回影响的行数 | - | ✔ | ✔ | |
| 更新时,返回插入后的记录 | - | - | ✔ | SqlServer output inserted 特性、PostgreSQL returning 特性 |
| 批量更新 | - | - | ✔ | |
| 删除(单条) | ✔ | ✔ | ✔ | |
| 删除时,动态条件 | - | ✔ | ✔ | 主键值、new[] { 主键值1, 主键值2 }、实体对象、new[] { 实体对象1, 实体对象2 }、new { id = 1 } |
| 删除时,指定条件 | - | ✔ | ✔ | |
| 删除时,自动附加全局过滤器条件 | - | - | ✔ | |
| 删除时,不需要先查询数据 | - | ✔ | ✔ | |
| 删除时,返回影响的行数 | - | ✔ | ✔ | |
| 删除时,返回插入后的记录 | - | - | ✔ | SqlServer output deleted 特性、PostgreSQL returning 特性 |
| 添加或更新 | - | ✔ | ✔ | |
| 添加或更新,自动适配 merge into | - | - | ✔ | [参考文档](https://github.com/dotnetcore/FreeSql/wiki/%E6%B7%BB%E5%8A%A0%E6%88%96%E4%BF%AE%E6%94%B9) |
| 批量编辑保存 | ✔ | - | ✔ | [参考文档](https://github.com/dotnetcore/FreeSql/wiki/%E6%B7%BB%E5%8A%A0%E6%88%96%E4%BF%AE%E6%94%B9#3beginedit-%E6%89%B9%E9%87%8F%E7%BC%96%E8%BE%91) |
| 查询(单条) | ✔ | ✔ | ✔ | |
| 查询时,动态条件 | - | ✔ | ✔ | 主键值、new[] { 主键值1, 主键值2 }、实体对象、new[] { 实体对象1, 实体对象2 }、new { id = 1 } |
| 查询时,动态过滤条件 | - ✔ | ✔ | [参考文档](https://github.com/dotnetcore/FreeSql/wiki/%E6%9F%A5%E8%AF%A2#%E7%89%B9%E5%88%AB%E4%BB%8B%E7%BB%8D-wheredynamicfilter) |
| 查询时,分页 | ✔ | ✔ | ✔ | |
| 查询时,分页支持 SqlServer2008 | - | ✔ | ✔ | FreeSql 自动优化SqlServer 2012 以前的版本,使用 row_number 分页SqlServer 2012+ 版本,使用最新的 fetch next rows 分页;|

@@ -49,9 +49,9 @@
## 使用指南 ## 使用指南
* FreeSql有什么特色功能 * [FreeSql有什么特色功能](https://github.com/2881099/FreeSql/wiki/%E9%AA%9A%E6%93%8D%E4%BD%9C)
* Dapper比较 * Dapper比较
* EntityFramework比较 * [EntityFramework比较](https://github.com/2881099/FreeSql/wiki/EntityFramework%e6%af%94%e8%be%83)
## 学习与交流 ## 学习与交流