Dapper中的DbContext,DbSet等

c# dapper sql

我正在使用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查询表,并使用dapper sqlbuilder基于给定的链接表达式“生成”SQL实现iqueryable。

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

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

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

一般承认的答案

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

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


热门答案

Dapper的一个关键特性是性能。

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



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因