困惑的关闭连接立即vs每个请求(asp.net mvc 5)ado.net vs2015

时间:2015-10-11 06:21:24

标签: c# asp.net-mvc ado.net

我是一个转型为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);
        }
    }

0 个答案:

没有答案