Dapper 语法 - 2016

问题描述 投票:0回答:1

我刚刚开始我的第一个 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;
    }
asp.net-mvc-5 dapper
1个回答
2
投票

使用 Dapper,有两种管理连接的方法:

  • 完全管理自己:在这里,您完全负责打开和关闭连接。这就像使用 ADO.NET 时处理连接的方式一样。在这种情况下,您应该确保使用
    using
    块或显式调用
    Dispose
    正确处理连接。
  • 允许 Dapper 管理它:Dapper 会自动为您打开连接(如果未打开)并关闭连接(如果 Dapper 打开)。这与
    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
连接正确即可。

  • 允许 Dapper 来管理它:我个人不喜欢这样。

以下是示例:

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.
© www.soinside.com 2019 - 2024. All rights reserved.