Dapper语法 - 2016

时间:2016-12-09 00:15:57

标签: asp.net-mvc-5 dapper

我刚开始使用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;
    }

1 个答案:

答案 0 :(得分:1)

使用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.