gpt4 book ai didi

c# - 每次使用 Dapper 访问数据库时确保数据库连接打开和关闭

转载 作者:行者123 更新时间:2023-11-30 20:42:52 25 4
gpt4 key购买 nike

这是我目前在我的一个存储库类中所做的事情:

private IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString);

public IEnumerable<Product> GetProducts(int categoryId = null, bool? active = null)
{
StringBuilder sql = new StringBuilder();
sql.AppendLine("SELECT * ");
sql.AppendLine("FROM Product ");
sql.AppendLine("WHERE @CategoryId IS NULL OR CategoryId = @CategoryId ");
sql.AppendLine(" AND @Active IS NULL OR Active = @Active");

return this.db.Query<Product>(sql.ToString(), new { CategoryId = categoryId, Active = active }).ToList();
}

我想做的一件事是将 IDbConnection 属性放在我所有其他存储库继承自的 BaseRepository 中。我该怎么做才能确保我的数据库连接在我的每个数据访问函数中正确打开和关闭,如上面的示例?这是我目前使用 Entity Framework 所做的事情(每个函数都有一个 using 语句,但现在我将 DAL 切换为使用纯 Dapper:

using (var context = new MyAppContext())
{
var objList = (from p in context.Products
where (categoryId == null || p.CategoryId == categoryId) &&
(active == null || p.Active == active)
select p).ToList();

return objList;
}

我注意到 Dapper examples一切都像我期望的那样包装在一个 using 语句中,但偶尔我会看到它们将它们的函数包装在下面的 using 中:

using (var connection = Program.GetClosedConnection())

GetClosedConnection() 返回一个新的 SqlConnection,但两者有什么区别?

public static SqlConnection GetOpenConnection(bool mars = false)
{
var cs = connectionString;
if (mars)
{
SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder(cs);
scsb.MultipleActiveResultSets = true;
cs = scsb.ConnectionString;
}
var connection = new SqlConnection(cs);
connection.Open();
return connection;
}
public static SqlConnection GetClosedConnection()
{
return new SqlConnection(connectionString);
}

最佳答案

这是我一直以来的做法:

SqlConnection dbConnection;
using (dbConnection = new SqlConnection(connectionString))
{
/*
Whatever Dapper stuff you want to do. Dapper will open the
connection and the using will tear it down.
*/
}

至于你问题的第二部分,GetClosedConnection 只是实例化了一个 SqlConnection 对象,而 GetOpenConnection 实例化了并打开 SqlConnection 对象。您(或 Dapper)必须对 GetClosedConnection 返回的对象手动调用 Open()

关于c# - 每次使用 Dapper 访问数据库时确保数据库连接打开和关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31013666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com