我并不是直接实体映射器的粉丝,因为我仍然认为SQL查询是最快的,并且在手工直接写入数据库时使用最优化(使用正确的连接,分组,索引等)。
在我目前的项目中,我决定尝试BLToolkit,我对它的Ado.net和速度包装非常满意,所以我查询数据库并获得强大的C#类型对象。我还写了一个T4 that generates stored procedure helpers所以我在调用存储过程时不必使用魔术字符串,所以我的所有调用都使用强类型参数。
基本上我的所有CRUD调用都是通过存储过程完成的,因为我的许多查询都不是简单的select语句,特别是我的创建和更新也会返回结果,这很容易使用只进行一次调用的存储过程完成。总之...
BLToolkit的最大缺点(我希望每个人都能评估BLToolkit知道这个)不是它的功能或速度,而是它非常稀缺的文档以及支持或缺乏。因此,这个库的最大问题是进行试验和错误以使其正常工作。这就是为什么我也不想使用它的太多不同部分,因为我使用的越多,我必须自己解决的问题就越多。
我对BLToolkit有哪些替代方案:
基本上它应该非常轻量级,基本上应该只有一个简单的Ado.net包装器和对象映射器。
最重要的要求:易于使用,受到良好支持,社区也在使用。
答案 0 :(得分:4)
我可以看到大枪已将其访问策略转换为微型ORM工具。当我评估BLToolkit时,我正在玩同样的想法,因为它对我使用的功能感觉笨重(1.5MB)。最后,我决定编写前面提到的T4(有问题的链接),以便在调用存储过程时更轻松。但BLToolkit中仍有许多可能性,我完全不使用甚至不理解(原因也在问题中指出)。
最佳选择是 micro ORM 工具。也许最好将它们称为微型对象映射器。他们都有相同的目标:简单和极速。他们没有遵循他们的大家伙ORM的 NoSQL 范例,因此大多数时候我们必须编写(几乎)日常TSQL来支持他们的请求。他们获取数据并将它们映射到对象(有时还提供更多内容 - 请在下面查看)。
我想指出其中的3个。它们都在一个代码文件中提供,而不是作为编译的DLL提供:
IDbConnection
上的通用扩展方法,这意味着它支持任何后备数据存储,只要有一个实现IDbConnection
接口的连接类;
dynamic
(。net 4 +)Person
+ Address
)dynamic
类型映射(在.net 3.5或更大的宝宝中不支持)DynamicModel
类,并从任意裸金属TSQL提供CRUD功能或地图dynamic
IsNew
SqlBuilder
类,可以更轻松地构建TSQL语句在所有三个PetaPoco中,在开发方面似乎是最活跃的,并且通过充分利用其他两个(以及其他一些)来支持大多数事情。
在所有这三个中,Dapper具有最佳的实际使用参考,因为它被世界上最高流量站点之一使用:Stackoverflow。
他们都遇到魔术字符串问题,因为您在大多数时间直接将SQL查询写入其中。但其中一些可以通过T4减轻,因此您可以使用强类型调用,在Visual Studio中动态提供智能感知,编译时检查和重新生成。
dynamic
类型我认为dynamic
类型的最大缺点是维护。想象一下使用动态类型的应用程序。一段时间后查看自己的代码将变得相当有问题,因为您没有任何具体的类来观察或坚持。尽管dynamic
类型是祝福,但从长远来看,它们也是一种诅咒。