使用EF框架的优化(七)
using的另一种用法
我们知道using关键字通常用来引入命名空间,当然微软引入了另外一种用法。对于EF Core的DbContext,框架推荐在用完之后将上下文销毁。而我们每次使用必须都进行手动销毁。
如果我们在使用try/catch/finally进行捕获异常的时候,需要在finally里放资源释放的代码。如果资源得不到正确及时的释放会出现更多的问题。
为了改善这种现状,微软便添加了using关键字的另外一种用法。
using (var context = new DefaultContext("Data Source=./blogging1.db")) { // 使用 context }
以上实例代码中using的含义是声明一个context作用于两个大括号之间,当两个大括号之间的代码执行完成后,会自动调用context.Dispose()方法。
using关键字的机制不会因为中途返回而不执行 context.Dispose(),也不会因为中间被抛出异常不执行。using的使用并不局限于实现IDisposable接口的对象,其他的对象也可以使用。
- EFCore中的约定大于配置,比如模型如果有Id字段默认就是主键。
- 一对多关系配置和获取,上面示例中学生有哪些课程就是一对多,查询关联要用includ。
- 多个外键字段的配置。
- 一对多,多对多关系。
- Iqueryable的作用和数据延迟加载,在我们查询数据的时候列表数据以Iqueryable类型返回,如果我们不是调用获取结果api,则不会立即查询数据库,而是等到使用tolist()、count()、max()等方法时才会查询数据返回结果。这样有利于我们在代码中复用Iqueryable,比如不同的if条件拼接后组成不同的查询语句。
- EFcore 缓存。
- AsNoTracking使用,EFCore默认会跟踪实体,也就是保存在内存中,用于更新删除等操作。如果只是查询数据而不用跟踪则使用AsNoTracking查询。
- 并发控制。