我需要一些帮助来更好地理解 Dapper 如何处理数据库连接,以及为什么没有正确处理数据库连接。我已经围绕不同的可能情况进行了编码。在我的代码中,我正在检查 _connection 是否为空,并相应地创建一个新连接。在处理请求时,我发现有时连接处于打开状态,而有时我发现对象中缺少连接字符串(使其无法使用,但未将其设置为 NULL)。我正在相应地处理这些情况,但想了解为什么连接具有这些不同的状态,并且即使客户端代码明确实现using语句来包装代码。是 ADO.net 对连接的处理,是 Dapper 的副作用还是我的代码有问题?
连接管理代码
public class DatabaseContext : IDatabaseContext
{
private readonly string _connectionString;
private DbConnection _connection;
public DatabaseContext(string connectionString)
{
_connectionString = connectionString;
}
public IDbConnection Connection
{
get
{
if (_connection == null)
_connection = new SqlConnection(_connectionString);
if (string.IsNullOrEmpty(_connection.ConnectionString))
_connection.ConnectionString = _connectionString;
if (_connection.State != ConnectionState.Open)
_connection.Open();
return _connection;
}
}
}
客户端代码
public IEnumerable<PostSearResults> Search(SearchPostsBy searchPostsBy)
{
DynamicParameters param;
var sql = GetSearchSql(searchPostsBy,out param);//Gets SQL
using (var connection = _databaseContext.Connection)
{
var posts = connection.Query<PostSearResults>(sql, param);
return posts.ToList();
}
}