Dapper 语法 - 2016

Dapper Syntax - 2016

我刚刚开始我的第一个 MVC 项目,使用 Dapper(和 Dapper.Contrib)而不是 EF。我试图确保在使用它时使用正确的语法。在网络上搜索,我可以看到随着 Dapper 的发展,它的一些要求和语法也在发展。是否有最新文档显示 2016 年使用 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 年,您应该避免将您的连接直接暴露给您的应用程序代码。您应该使用 UnitOfWorkRepository 等模式实现数据访问层(最好使用您已经在学习的一些好的 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.