MVC、DbContext和多线程

5
这些主题分别有很多问题,每个人都有自己的观点。也许有人可以就以下问题给我一个好的答案。
我有一个Asp.NET MVC Web服务,它使用EntityFramework来访问数据库。有一个单一的控制器,每当用户请求Web服务时就会创建一个实例。每个请求都很快,只是从数据库中获取一些数据,对其进行更改,然后保存。
问题当然是如何维护DbContext(因为它不是线程安全的)?在控制器的构造函数中,我创建了一个DbContext的实例。在控制器的Dispose()中,我释放了DbContext。
我看到有些帖子说每个请求创建一个实例不是一个好的做法。这不是吗?
谢谢, Edi.
2个回答

4

DbContext旨在每个请求中实例化。它实现了IDisposable接口,实例化是一个低成本的操作。连接池到数据库是由内部处理的。

更多信息:

Entity Framework和连接池


太好了,现在我明白了。我以前使用ADO编程,自己处理连接池,当我转换到DbContext概念时感到困惑。 - Edi
我只需要向你和任何后来的人指出,如果有人因某种原因需要进入原始的 ADO.Net 级别,那么连接池已经由 Windows(以及 DAC 本身)在堆栈较低的位置处理了。通常情况下,除非您正在尝试引入某种类型的限制池(即使是这样,也有更简单的方法使用某种容器),否则没有必要尝试自己实现这种逻辑。 - Jimmy Zimms

2

DbContext是一个非常轻量级的对象,它被设计用于每个操作(=请求)创建并在完成后立即释放。在底层,Ado.net负责从连接池中重复使用数据库连接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接