我刚刚开始我的第一个 MVC 项目,使用 Dapper(和 Dapper.Contrib)而不是 EF。 我试图确保在使用它时使用正确的语法。 在网上搜索后,我发现随着 Dapper 的发展,它的一些要求和语法也在不断发展。 是否有最新文档显示 2016 年使用 Dapper 的最佳实践?
具体来说,我的问题是:
我需要打开和关闭连接吗? 看起来 Dapper 曾经需要它,但可能不再需要它了。
使用 Dapper.Contrib,我是否需要将我的代码封装在“using”调用中,或者 Dapper 现在会自动处理自身吗?
推荐哪种方式?
private string dbconn = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
public Company Add(Company company)
{
using (SqlConnection cn = new SqlConnection(dbconn))
{
cn.Open();
var id = cn.Insert(company);
cn.Close();
company.id = Convert.ToInt16(id);
}
return company;
}
或
private IDbConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
public Company Add(Company company)
{
var id = cn.Insert(company);
company.id = Convert.ToInt16(id);
return company;
}
使用 Dapper,有两种管理连接的方法:
using
块或显式调用 Dispose
正确处理连接。DataAdapter.Fill()
方法类似。在 2016 年,您应该避免将连接直接暴露给应用程序代码。您应该使用
UnitOfWork
、Repository
等模式来实现数据访问层(最好使用一些好的 ORM,例如您已经在学习的 Dapper)。可以在 here 找到 UnitOfWork + Dapper 的代码示例。请看一下。我相信它会对你有所帮助。
如果你不想实施
UnitOfWork
,我的建议如下:
以下是示例:
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
connection.Execute(......);
//OR
var data = connection.Query(......);
//OR whatever
}
如果您想在更高范围内共享连接,因此无法使用
using
块,那么只需确保您 Dispose
连接正确即可。
以下是示例:
SqlConnection connection = new SqlConnection(connectionString);
//Dapper will open connection on next line.
var data = connection.Query(......);
//Dapper will close connection in previous call.
//Dispose the connection or use for other calls.
//You may use above code in using block as well.