C# 初始化数据库连接的最佳实践

C# 初始化数据库连接的最佳实践,c#,asp.net,oracle,asp.net-mvc-4,odp.net,C#,Asp.net,Oracle,Asp.net Mvc 4,Odp.net,我目前正在从事一个MVC4项目,我们决定使用普通的SQL,不依赖EntityFramework 我现在的问题是初始化数据库连接的最佳实践是什么。我考虑过使用一个打开连接的单例(连接字符串存储在Web.config中),然后在整个应用程序生命周期中使用已建立的连接,但我不确定这是否是一个好方法 对于数据库连接,尽可能晚地打开,尽可能早地关闭 与单例连接不同,您应该在必要时创建连接对象,如果使用block更好,因为连接实现了IDisposable,并且您应该在使用完连接后获得dispose 对于数据

我目前正在从事一个MVC4项目,我们决定使用普通的SQL,不依赖EntityFramework


我现在的问题是初始化数据库连接的最佳实践是什么。我考虑过使用一个打开连接的单例(连接字符串存储在Web.config中),然后在整个应用程序生命周期中使用已建立的连接,但我不确定这是否是一个好方法

对于数据库连接,尽可能晚地打开,尽可能早地关闭


与单例连接不同,您应该在必要时创建连接对象,如果使用block更好,因为连接实现了
IDisposable
,并且您应该在使用完连接后获得dispose

对于数据库连接,尽可能晚地打开,尽可能早地关闭


与单例连接不同,您应该在必要时创建连接对象,如果使用block更好,因为连接实现了
IDisposable
,并且您应该在使用完连接后获得dispose

ODP.NET
支持连接池,因此没有理由(除非在您的具体案例中另有证明)保留
OracleConnection
对象的
Singleton

这里的最佳实践是对每条语句使用连接(.NET连接对象,而不是物理连接)

using(OracleConnection connection = ...)
    {
        ...Do work here
    }

ODP.NET
支持连接池,因此没有理由(除非在您的具体案例中另有证明)保留
OracleConnection
对象的
Singleton

这里的最佳实践是对每条语句使用连接(.NET连接对象,而不是物理连接)

using(OracleConnection connection = ...)
    {
        ...Do work here
    }

如果您想了解与刚才描述的类似方法的更多信息,请查看此处:。我已经回答了那种进退两难的问题。确保您不会在每个应用程序规模上执行此操作,而是在每个请求上执行此操作,否则您会遇到麻烦。每个应用程序适用于单用户桌面应用程序,而不是Web应用程序!也不要使用singleton…

如果您想了解与刚才描述的类似方法的更多信息,请查看此处:。我已经回答了那种进退两难的问题。确保您不会在每个应用程序规模上执行此操作,而是在每个请求上执行此操作,否则您会遇到麻烦。每个应用程序适用于单用户桌面应用程序,而不是Web应用程序!也不要使用singleton…

没有最好的方法,只有最适合您的需求和情况的方法,您必须自己找出答案。这是非常固执己见的,恐怕不适合这里。你是说在整个应用程序生命周期中使用同一个连接实例?没有最好的方法,只有最适合你的需要和情况的方法,你必须自己弄清楚这一点。这是非常固执己见的,恐怕不适合这里……你的意思是在整个应用程序生命周期中使用相同的连接实例吗?-1:对于数据库来说,打开连接是一项非常昂贵的操作。分配PGA等等。你不想每秒打开50个连接来进行简单的选择,你宁愿使用一些池。@Plouf,.Net中有连接池来解决这个问题,它是关于在不需要时处理连接对象,如果我在一个模块中需要50次读取,我会用一个连接来完成,但是我会确保在完成连接后处理它。-1:对于数据库来说,打开连接是一项非常昂贵的操作。分配PGA等等。你不想每秒打开50个连接来进行简单的选择,你宁愿使用一些池。@Plouf,.Net中有连接池来解决这个问题,它是关于在不需要时处理连接对象,如果我在一个模块中需要50次读取,我会用一个连接来完成,但我会确保在完成连接后处理它。