使用经典的 ADO.NET 时,通常在执行完 SQL 命令后立即关闭 SQL 连接,因此该连接会被关闭并返回到池中。
类似于以下代码:
在使用EF Core的ASP.NET Core中,通常我们会使用依赖注入框架将
我假设在幕后,
我想知道 EF Core 何时关闭
因此,在上面的示例中,它会在从
类似于以下代码:
public Order[] GetActiveOrders()
{
var orders = new List<Orders>();
using (SqlConnection connection = new SqlConnection("connectionString"))
{
using (SqlCommand cmd = connection.CreateCommand())
{
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = "Select * FROM ORDERS WHERE Status = 'Active'";
cmd.Connection.Open();
using (var reader = cmd.ExecuteReader())
{
//populate orders
}
}
}
// SQL connection is closed here and returned back to connection pool
return orders;
}
在使用EF Core的ASP.NET Core中,通常我们会使用依赖注入框架将
DbContext
注入到构造函数中。 public class OrderService:IDisposable
{
private readonly MyDBContext _dbContext;
public OrderService(MyDBContext dbContext)
{
_dbContext = dbContext;
}
public Order[] GetActiveOrders()
{
var orders = _dbContext.Orders.Where(x=>x.Status == 'Active').ToArray()
return orders;
}
#region Dispose
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (_disposed)
return;
if (disposing)
{
if (_dbContext != null)
{
_dbContext.Dispose();
}
// Free any other managed objects here.
}
// Free any unmanaged objects here.
_disposed = true;
}
}
我假设在幕后,
DbContext
仍然使用 SqlCommand
和 SqlConnection
连接到数据库。我想知道 EF Core 何时关闭
SqlConnection
? 它是否在执行查询后立即关闭连接(类似于经典 ADO 中的方式),还是在 DbContext
被处理时关闭?因此,在上面的示例中,它会在从
GetActiveOrders()
方法返回 Orders
之前处置连接,还是在 DI 容器处置 OrderService
时?