在asp.net mvc应用程序中,我使用EF5,并为每个http请求创建一个DbContext实例。我的代码不会担心打开/关闭数据库连接,因为它由EF本身处理。
我的问题:
如果我在一个http请求中使用DbSet进行多个数据库读/写操作。每个操作都需要打开/关闭数据库连接吗?在一个http请求中,可能会导致这么多打开/关闭,这很昂贵。
如果上述问题为是,我可以自己手动管理打开/关闭数据库连接,以便它将在begin_request中打开并在end_request处关闭吗?
由于
答案 0 :(得分:1)
我们有EF4的生产服务器,我们看不到在一天内偷看的近1000个同时发出的请求的性能问题。
答案 1 :(得分:0)
您可以使用以下DbContext的构造函数在Entity Framework 6上手动管理连接:
DbContext(DbConnection, Boolean)
有一个例子(伪代码):
// ...
var myConnection = new SqlConnection(myConnectionString);
var myDbContext = new MyDbContext(myConnection, false);
// ...
// TODO: you must close and dispose "myConnection" manually
MyDbContext的位置:
class MyDbContext : DbContext
{
// ....
// constructor
MyDbContext(DbConnection conn, boolean contextOwnsConnection)
: base (conn, contextOwnsConnection)
{
// ...
}
// ....
}
如果您使用" true"作为contextOwnsConnection,当我们的DbContext被释放时,连接将被关闭。
有关布尔参数的帮助,请参阅https://msdn.microsoft.com/en-us/library/system.data.entity.dbcontext(v=vs.113).aspx
上的文档请注意,我们可以使用此方法使用具有相同连接的多个DbContexts。
另请注意,我们可以根据我们连接的数据库使用连接。在以下示例中,我们为实体框架安装了ODP以使用Oracle:
var myConnection = new OracleConnection(myConnectionString);