我正致力于使用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项目中可用?
答案 0 :(得分:7)
就我个人而言,我会说这是小巧的图书馆试图提供的内容之外的东西。这个想法很有道理,但是我担心到你做完这个时,你基本上只是重新实现了LINQ-to-SQL。有一种更简单的方法:您只需使用LINQ-to-SQL 。 Dapper通常很乐意填充L2S模型 - 基本上 我们(小巧的作者)如何使用它(并继续使用它)来对抗我们已有的L2S代码库。它也类似于EF等。
但是,如果你真的想要完成这项工作,我相信你可以在dapper之上编写一个库来执行此操作。做一些已经存在的事情看起来似乎很多。
答案 1 :(得分:0)
Dapper的一个关键特性就是表现。
创建Dapper以快速将结果从纯SQL映射到对象。绝对不是让开发人员避免编写SQL。 将SQL构建器与Dapper一起使用可能不太好。更糟糕的是实施变更跟踪。 如果您需要这些功能,只需使用Entity Framework或其他完整的ORM。