本来EF的设计上DbContext就应该是一个短暂存在的对象,所以它默认才开了缓存和自动检测对象修改之类的功能,而且不是线程安全的。理想的生命周期应该是处理一次请求使用一个context,全局使用会带来很多问题。
1、对于即时性要求比较高的数据,每次手动创建一个context新实例来操作数据;
2、避免在死循环里面使用CallContext.GetData()线程槽技术,循环里面线程得不到释放,导致context缓存也得不到释放,如果一定要用的话,采用.AsNoTracking();
本来EF的设计上DbContext就应该是一个短暂存在的对象,所以它默认才开了缓存和自动检测对象修改之类的功能,而且不是线程安全的。理想的生命周期应该是处理一次请求使用一个context,全局使用会带来很多问题。
1、对于即时性要求比较高的数据,每次手动创建一个context新实例来操作数据;
2、避免在死循环里面使用CallContext.GetData()线程槽技术,循环里面线程得不到释放,导致context缓存也得不到释放,如果一定要用的话,采用.AsNoTracking();