Answers:
将开放的连接传递给每个类可能不是最好的主意。阅读创建数据库连接-是一次还是每个查询一次?
建议您为每个要运行的查询打开和关闭连接,而不是将打开的连接传递到存储库。
您可以尝试使用这种方法来帮助您管理连接。
public class Repository
{
private readonly string _connectionString;
public Repository()
{
_connectionString = ConfigurationManager.ConnectionStrings["connString"].ConnectionString
}
protected SqlConnection GetConnection()
{
return new SqlConnection(_connectionString);
}
}
public sealed class UserRespository : Repository
{
public User GetUsers()
{
using (var connection = GetConnection())
{
using (var commnad = new SqlCommand("SqlQuery", connection))
{
//Execute Query
//Return results
}
}
}
}
具有开放的连接并在类之间传递它通常是一个坏主意。当然,打开连接确实会对性能造成影响,但是连接池已经通过重用已经打开的连接来解决此问题。不过请注意:始终等待尽可能长的时间来调用connection.Open()
,尤其是在多线程代码中,因为这会将连接分配给您的方法(这将有目的地增加对数据库的打开连接所需的数量)。
为了使您的类尽可能通用,我建议您使用一个基类,使用IDbConnection公开一个方法,并且您的存储库将具有更通用的实现。
internal abstract class Repository
{
private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["myconnectionstring"].ConnectionString;
protected IDbConnection GetConnection()
{
return new SqlConnection(ConnectionString);
}
}
public class MyRepository : Repository
{
public IEnumerable<object> Get()
{
using (var connection = GetConnection())
{
connection.Open();
...
}
}
}