我没有在Web应用程序中使用LINQ-to-SQL或Entity Framework位,并且目前正在使用类似的东西(这是针对类项目):
using System.Data;
using System.Data.SqlClient;
namespace StackOverflowClone.Models
{
public class Database
{
public static SqlConnection ActiveConnection { get; private set; }
static Database()
{
ActiveConnection = new SqlConnection(
"Data Source=********.database.windows.net;" +
"Initial Catalog=EECS341;Uid=*****;Pwd=*******;" +
"MultipleActiveResultSets=True;");
ActiveConnection.Open();
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这似乎会导致线程问题,因为静态初始化程序每个服务器进程运行一次,而不是每个请求运行一次.
框架是否提供了处理此方法的内置方法,或者我是否应该只使用一个函数来咳嗽每次新建的数据库连接?
Red*_*ter 12
或者我应该只是有一个功能,每次都会咳嗽数据库连接吗?
是的,这样做.让ADO.NET连接池为您处理细节.您的目标应该是尽可能缩短连接时间.
连接池减少了必须打开新连接的次数.pooler保持物理连接的所有权.它通过为每个给定的连接配置保持一组活动连接来管理连接.每当用户在连接上调用Open时,pooler将在池中查找可用连接.如果池连接可用,则将其返回给调用者,而不是打开新连接.当应用程序在连接上调用Close时,pooler会将其返回到池化的活动连接集,而不是关闭它.一旦连接返回到池,就可以在下一个Open调用中重用它.
因此,创建一个GetConnection()返回新的打开连接的静态方法.在using语句中使用它,以便可以关闭它并尽快返回到连接池.
using(var cn = Database.GetConnection())
{
//query your data here, Dapper example below
cn.Execute("update MyTable set MyField = @newValue", new {newValue});
}
Run Code Online (Sandbox Code Playgroud)