首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dapper语法-2016年

Dapper语法-2016年
EN

Stack Overflow用户
提问于 2016-12-09 00:15:57
回答 1查看 2.4K关注 0票数 2

我刚刚开始我的第一个MVC项目使用Dapper (和Dapper.Contrib)而不是EF。我试图确保我在使用它时使用了正确的语法。搜索web,我可以看到,随着Dapper的发展,它的一些需求和语法也在不断发展。是否有最新的文件显示2016年使用Dapper的最佳做法?

具体来说,我的问题是:

  • 我需要打开和关闭连接吗?看起来Dapper曾经需要它,但可能不再需要了。
  • 使用Dapper.Contrib,我是否需要将我的代码封装在一个“使用”调用中,还是现在Dapper会自动处理自己?

推荐哪种方式?

代码语言:javascript
复制
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;
    }

代码语言:javascript
复制
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;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-09 06:30:25

对于Dapper,有两种管理连接的方法:

  • 完全管理自己--:在这里,您完全负责打开和关闭连接。这就像您在使用ADO.NET时对待连接的方式一样,在本例中,您应该确保正确地使用using块或显式调用Dispose来处理连接。
  • 允许Dapper管理它,:Dapper会自动为您打开连接(如果它没有打开)并关闭它(如果它是由Dapper打开的)。这类似于DataAdapter.Fill()方法。

在2016年,您应该避免将连接直接暴露到应用程序代码中。您应该使用UnitOfWorkRepository等模式来实现数据访问层(最好使用一些好的ORM,如您正在学习的Dapper )。UnitOfWork + Dapper的代码示例可以找到here。请通过它。我相信这会对你有帮助。

如果您不想实现UnitOfWork,下面是我的建议:

  • 完全管理你自己

以下为样本:

代码语言:javascript
复制
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    connection.Execute(......);
    //OR
    var data = connection.Query(......);
    //OR whatever
}

如果希望在较高范围内共享连接,因此无法使用using块,则只需确保Dispose连接正确。

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

以下为样本:

代码语言:javascript
复制
SqlConnection connection = new SqlConnection(connectionString);
//Dapper will open connection on next line.
var data = connection.Query(......);
//Dapper will close connection in previous call.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41051110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档