EF6.0相对于5.0新加了很多功能。先看看两个模式的一些特点。
数据库优先(设计者)和代码优先两者的特点:
- 连接弹性
- 异步查询和保存
- 基于代码的配置
- 数据库命令记录
- 数据库命令截取
- 依赖决议
- DbSet.AddRange / RemoveRange
- 更好的交易支持
- 可插拔的多元化和单一化服务
- 可测试性改进
- 用打开的连接创建上下文
- 提高性能和预热时间
Code-First的特点:
- 自定义约定
- 插入,更新和删除实体CUD操作的存储过程
- 索引属性(EF 6.1)
- 每个数据库多上下文
- 嵌套的实体类型
- 自定义迁移操作
- 可配置的迁移历史记录表
异步查询和保存:
有关异步知识:System.Threading.Tasks
异步简单列子:
数据库命令日志记录:
使用context.database.Log记录EF执行的所有活动。您可以附加任何类的任何方法,它接受一个字符串参数并返回void。
Context.Database.Log是一个Action <string>,所以你可以附加任何具有一个字符串参数和void返回类型的方法。
事务:
实体框架默认在执行SaveChanges()时将Insert,Update或Delete操作包装在事务中。EF为每个操作启动一个新的事务,并在操作完成时完成事务。当你执行另一个这样的操作时,一个新的事务被启动。
EF 6引入了database.BeginTransaction和Database.UseTransaction来提供对事务的更多控制。
DbSet.AddRange&DbSet.RemoveRange:
EF 6中的DbSet引入了新的AddRange和RemoveRange方法。DbSet.AddRange将实体的集合(IEnumerable)添加到DbContext,可以批量添加和删除了。