DbContext和连接池在我继承的应用程序中,它位于应用程序中每个其他控制器继承自的基本控制器中。publicBaseController(){db=newMyDbContext();db.Database.Log=s=>Debug.Write(s);}publicMyDbContext():base("name=MyDbContext"){//hack强制VisualStudio部署Entityframework.SqlServer包varinstance=SqlProviderServices.Instance;由于应用程序的设计方式,每个请求至少创建2个上下文。(这是一个MVC应用程序,每个页面调用HomeController以及特定页面的其他控制器。)我的问题是DbContext是否创建到SQLServer的连接?是在创建上下文时,还是仅在执行查询时?如果是前者,那么我将使用两倍于所需数量的SQL服务器连接,如果是后者,那么问题可能不大。我不认为我能在不久的将来重构这个,当然不是没有理由的。我应该注意这种设计的哪些潜在缺陷?entityframework6.1.3因为您没有尝试在上下文的构造函数中自己创建和传递连接,正如其他人所说,EF将根据需要从连接池获取/释放连接,而不是在构造时。请注意EF文档中的引用:Connections默认情况下,上下文管理与数据库的连接。上下文根据需要打开和关闭连接。例如,上下文打开连接以执行查询,然后在处理完所有结果集后关闭连接。在某些情况下,您希望更好地控制何时打开和关闭连接。例如,在使用SQLServerCompact时,打开和关闭同一个连接的开销很大。您可以使用Connection属性手动管理此过程。有关详细信息,请参阅以下链接:https://msdn.microsoft.com/en-us/data/jj729737https://msdn.microsoft.com/en-us/data/dn456849实体框架遵循延迟开放和提前关闭原则。所以它只在需要时打开连接,IE完成查询,然后尽快关闭它。如果可以,您应该针对每个请求移动到单个上下文实例。这也将请求期间发生的所有事情都保存在一个事务中。如果你使用依赖注入容器来实例化你的控制器,你可以很容易地做到这一点。连接仅在执行查询时打开。连接池由ADO.NET类(SqlConnection)管理。每个请求有多个DbContext实例是可能的,有时是必要的。通常,您不会有两倍的连接数。以上就是C#学习教程的全部内容:DbContext和连接池分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
