我刚开始使用Dapper(和Dapper.Contrib)代替EF开始我的第一个MVC项目。我尝试确保在使用时使用正确的语法。在网上搜索,我可以看到,随着Dapper的发展,它有一些要求和语法。是否有最新文档显示2016年使用Dapper的最佳实践?
具体来说,我的问题是:
我是否需要打开和关闭连接?看起来Dapper曾经要求它,但可能不再需要它。
使用Dapper.Contrib,我是否需要将我的代码封装在'使用'打电话或者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;
}
OR
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;
}
答案 0 :(得分:1)
使用Dapper,有两种方法可以管理连接:
using
阻止正确处理连接或明确调用Dispose
。DataAdapter.Fill()
方法。 2016年,您应该避免直接将您的连接暴露给您的应用程序代码。您应该使用UnitOfWork
,Repository
之类的模式来实现数据访问层(最好使用一些你正在学习的好的ORM,如Dapper)等。可以找到UnitOfWork + Dapper的代码示例here 。请仔细阅读。我相信它会对你有帮助。
如果您不想实施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.