EF
EF 实体框架是一种对象关系映射器(O/RM),它使.NET开发人员能够通过.NET对象来操作数据库.
Dbcontext 上下文类 实体类和数据库之间的桥梁 主要负责与数据交互。
主要作用:
1、DbContext包含所有的实体映射到数据库表的实体集(DbSet < TEntity >)。
2、DbContext 将LINQ-to-Entities查询转换为SQL查询并将其发送到数据库。
3、更改跟踪: 它跟踪每个实体从数据库中查询出来后发生的修改变化。
4、持久化数据: 它也基于实体状态执行插入、更新和删除操作到数据库中。
在EF工作过程中,对实体的操作会导致实体状态的变化,Context根据实体状态的变化生成和执行对应的SQL语句。简言之,对实体的操作给实体添加标签(如Added,Deleted,Modified),DbContext根据实体的标签生成(Insert,Delete,Update)Sql语句,然后EF通过Ado.Net执行Sql实现持久化。
DbSet 表示上下文中给定类型的所有实体的集合或可从数据库中查询的给定类型的所有实体的集合。提供了CRUD的方法。 可以使用 DbContext.Set 方法从 DbContext 中创建 DbSet 对象,DbSet对应着数据库中的表
EF在调用context.SaveChange方法时,根据EntityState进行添加、修改或删除实体实例,并执行INSERT,UPDATE和DELETE语句。在线场景中,context跟踪所有实体的实例,EntityState无论何时创建,修改或删除实体,它都会自动为每个实体设置适当的实例。
dapper dapper是一款轻量级的ORM(Object Relationship Mapper),它负责数据库和编程语言之间的映射
二者都是ORM框架 对象关系映射(Object Relational Mapping)框架 相同的作用就是将关系型数据库中的表的数据,映射成为对象.这样,开发人员就可以把对数据库的操作转化为对这些对象的操作。
目的是为了方便开发者,用面向对象的思想进行操作数据库。
小记二者的优缺点和区别如下:
EF优点:
1 面向对象的方式操作数据库
2.能够摆脱SQL,完全不用关心SQL怎么写,可移植性强.
3.EF支持和适配了所有流行的关系型数据库,并且是面向接口的设计,并对事物,缓存(一级缓存)有良好的封装及配置.
4.支持code first.开发人员,可以完成不用关心数据库,代码先行,极大的节约开发成本.
5.开发效率非常高,结合LINQ,开发速度极快.
缺点:
1.EF的Context上下文不是线程安全的,开发人员切记不应该在整个Service上使用一个Context上下文.
2.性能一般 对于大量数据 高负载场景慎用 对于多表查询,复杂查询比较困难 不适合统计查询
3.实现良好的二级缓存很困难,并且只能定制.
dapper优点:
1.开源,轻巧。
2.执行的效率高,Dapper的速度和原生的IDataReader接近,取列表的数据甚至超过了DataTable.Dapper的原理通过Emit反射IDataReader的序列队列,来快速得到和产生对象
缺点:1.不支持code first 2.较弱的LINQ支持
总之快速能够能想到的3点 =》EF可以code first 不需要写SQL语句 而dapper就是半自动的 还是需要SQL支持。 另外EF是重量级 dapper是轻量级。EF性能一般,dapper性能快。
具体参考如下 EF详细的介绍加上栗子 dapper常规的CRUD也有
仔细一想不在过多深入,简单了解即可。
作者:捞月亮的猴子