Entity Framework Core 性能优化与缓存策略
1. 无跟踪模式的后果
无跟踪模式(No-Tracking Mode)除了缺少更改跟踪外,还有以下后果:
- 一级缓存不加载对象 :对象不会加载到 Entity Framework Core 的一级缓存中。当再次访问对象时(例如使用 DbSet<T>.Find()
),总是由数据库管理系统加载。
- 无关系修复 :关系修复是 Entity Framework Core 的一项功能,若两个独立加载的对象在数据库中相关,它会在内存中连接这两个对象。但在无跟踪模式下,此功能不可用。
- 延迟加载无效 :延迟加载在无跟踪模式下不起作用,不过目前 Entity Framework Core 本身也暂不支持延迟加载。
2. 最佳实践
Entity Framework Core 中新增的默认 QueryTrackingBehavior.NoTracking
和新扩展方法 AsTracking()
很有意义。但实际中许多 Entity Framework/Entity Framework Core 应用性能不佳,因此建议将 QueryTrackingBehavior.NoTracking
设为标准,这样开发者就能获得高性能的查询执行。目前,Entity Framework Core 默认设置为 QueryTrackingBehavior.Tra