我是一个转型为asp.net mvc的winform人,我的所有方法都是打开和关闭连接(shortLived)
public void Save()
{
using (var conn=new SqlConnection(ConnectionString))
{
conn.Open()
et.....
}
}
但是我注意到你倾向于保持连接打开并有一个类来处理实现IDisposible的连接然后 保持此连接open.something像
public class DbManager : IDisposable
{
private IDbConnection Conn { get; set; }
public IDbConnection Connection
{
get
{
if (Conn.State == ConnectionState.Closed)
Conn.Open();
return Conn;
}
}
public DbManager(string connString)
{
Conn = new SqlConnection(connString);
}
public void Dispose()
{
if (Conn == null) return;
if (Conn.State == ConnectionState.Open)
{
Conn.Close();
Conn.Dispose();
}
Conn = null;
我的理解是,关闭连接并不是消费者的责任,我也不确定 如果你有很多请求,你是否会用完游泳池
有人可以澄清什么是最佳做法?
请注意,我不使用EF而是使用纯ado.net,以防您提及dbcontext等...
我似乎都错了,我错过了明显的
感谢澄清
FYI
我正在实现自己的aspnet身份提供程序(NO EF),并注意到人们在Web项目中执行以下操作,当您将数据层耦合到UI时,这对我来说似乎是错误的:
我应该闭嘴并跟随吗?
app.CreatePerOwinContext(ApplicationDbContext.Create);
public class ApplicationDbContext : DbManager
{
public ApplicationDbContext(string connectionName)
: base(connectionName)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
}
}