假设我有一个长时间运行的进程(例如Windows服务),需要从多个线程访问数据库。DbContext并不是线程安全的,而且保留它很长时间也不是一个好主意(在Web环境中创建每个请求的新上下文似乎是一种被接受的最佳实践)。根据EF文档,上下文被期望是短暂和丢弃的,因此已经被实现为非常轻量级并尽可能重用元数据,因此在这些情况下为每个数据库操作创建一个新的DB上下文似乎是一个可行的方法,但这似乎有点过度。你认为呢?
确实是短期运行,但不仅因为数据库方面的考虑,还因为应用程序架构:如果您的架构符合Bob Martin的Clean Code标准,网站或Windows服务将不会了解数据库的任何信息,它们只会在需要时创建一个应用程序服务。 应用程序服务应负责控制数据库会话的生命周期和获取的所有数据。这对我非常有效。