Dapper 语法 - 2016
Dapper Syntax - 2016
我刚刚开始我的第一个 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,有两种管理连接的方法:
- 完全自己管理:在这里,您完全负责打开和关闭连接。这就像您在使用 ADO.NET 时处理连接的方式一样。在这种情况下,您应该确保使用
using
块或显式调用 Dispose
正确处理连接。
- 允许Dapper管理:Dapper自动为您打开连接(如果未打开)和关闭(如果已被Dapper打开)。这类似于
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
连接正确。
- 让Dapper来管理:我个人不喜欢这个
示例如下:
SqlConnection connection = new SqlConnection(connectionString);
//Dapper will open connection on next line.
var data = connection.Query(......);
//Dapper will close connection in previous call.
我刚刚开始我的第一个 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,有两种管理连接的方法:
- 完全自己管理:在这里,您完全负责打开和关闭连接。这就像您在使用 ADO.NET 时处理连接的方式一样。在这种情况下,您应该确保使用
using
块或显式调用Dispose
正确处理连接。 - 允许Dapper管理:Dapper自动为您打开连接(如果未打开)和关闭(如果已被Dapper打开)。这类似于
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
连接正确。
- 让Dapper来管理:我个人不喜欢这个
示例如下:
SqlConnection connection = new SqlConnection(connectionString);
//Dapper will open connection on next line.
var data = connection.Query(......);
//Dapper will close connection in previous call.