Dapper中的DbContext,DbSet等

时间:2015-04-03 14:13:21

标签: c# sql dapper

我正致力于使用dapper实现所有数据访问。 我的第一个想法是使用dapper实现存储库模式。 来自:http://www.bradoncode.com/blog/2012/12/creating-data-repository-using-dapper.html

然后我将linq表达式添加到dapper sqlbuilder中以最小化SQL,就像在示例中一样(动态查询)。所以我能写出像

这样的东西
sqlbuilder.Where(c=>c.Id == 1) or c.Id = myVar

现在我问自己,实现DbContext和DbSet以及使用linq表达式是否是个好主意。

问题不是实现完整的dbset或dbcontext。但只是看起来像(没有所有的复杂性)。

只是一个DbContext,它使用Dapper初始化连接和多个DbSet查询表,并使用iqueryable实现" generate" SQL基于使用dapper sqlbuilder的给定链接表达式。

<击> 在阅读了一些代码并与实体框架进行比较后,我认为这是浪费时间,因为实体框架已经做到了。 但是使用短小精悍的你可以完全控制生成的sql并且它总是使用相同的模板。

在开始之前(浪费我的时间)我想知道这是不是一个好主意。

编辑:很多评论说SqlBuider不是一件好事,那为什么它在Dapper项目中可用?

2 个答案:

答案 0 :(得分:7)

就我个人而言,我会说这是小巧的图书馆试图提供的内容之外的东西。这个想法很有道理,但是我担心到你做完这个时,你基本上只是重新实现了LINQ-to-SQL。有一种更简单的方法:您只需使用LINQ-to-SQL 。 Dapper通常很乐意填充L2S模型 - 基本上 我们(小巧的作者)如何使用它(并继续使用它)来对抗我们已有的L2S代码库。它也类似于EF等。

但是,如果你真的想要完成这项工作,我相信你可以在dapper之上编写一个库来执行此操作。做一些已经存在的事情看起来似乎很多。

答案 1 :(得分:0)

  

Dapper的一个关键特性就是表现。

创建Dapper以快速将结果从纯SQL映射到对象。绝对不是让开发人员避免编写SQL。 将SQL构建器与Dapper一起使用可能不太好。更糟糕的是实施变更跟踪。 如果您需要这些功能,只需使用Entity Framework或其他完整的ORM。