【问题标题】:Managing large number of connections in Entity Framework在实体框架中管理大量连接
【发布时间】:2015-04-12 22:47:15
【问题描述】:

我正在使用带有实体框架数据库的 ASP.NET MVC 4 第一种方法。我通常按​​以下方式进行 CURD 操作。

DashBordDataClassesDataContext context;

        public string Create(ProjectModel model)
        {
            string message = string.Empty;
            using (context = new DashBordDataClassesDataContext())
            {
                using (TransactionScope scopw = new TransactionScope())
                {
                    tblProject tb = new tblProject();
                    tb.ProjectName = model.ProjectName;
                    context.tblProjects.InsertOnSubmit(tb);
                    Save();
                }
            }

            return message;
        }

最近我遇到一个系统架构,他检查了我的代码并提出了以下问题,我无法提供正确的答案。

“当可能有大量用户运行相同的 Create 方法时,您将如何管理连接?”

他建议在多个用户之间共享一个连接。

我想知道他的解决方案是否实用

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-4 entity-framework-4 ado.net


    【解决方案1】:

    .Net 默认使用连接池。当连接超出范围时,它会被传递回池以供重用。整个事情都是围绕这个概念建立的,你必须不遗余力地做一些不同的事情。

    换句话说,ms 为您完成了这一切,因此您不必担心代码中的这些问题。

    在多个用户之间共享连接导致的问题多于解决的问题。例如,您如何在同一连接上同时拥有多个事务范围?不同的跨隔离也将是一个问题,在您知道自己在哪里之前,您有几种不同类型的连接,并且您正在编写大量代码以针对专门设计用于处理此问题的框架工作.

    连接数、存活时间等是可配置的。我只需要与它战斗两次。一次在安装程序中,一次用于支持 sql server 2000 到 2010。

    这确实假设(正如 EF 框架所做的那样)您没有坚持下去。例如,所有连接对象都通过 using 语句实例化,因此它们在完成后立即被丢弃。

    【讨论】:

      【解决方案2】:

      杀死你的系统架构师 :=) 并且永远不要共享连接,或使用静态 DbContext!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-16
        • 1970-01-01
        相关资源
        最近更新 更多