替代品(2011 年 5 月)
我可以看到大佬们已经将他们的访问策略转换为微型 ORM 工具。当我评估 BLToolkit 时,我也在玩同样的想法,因为对于我要使用的功能来说,它感觉很笨重(1.5MB)。最后,我决定编写前面提到的 T4(有问题的链接),以便在调用存储过程时让我的生活更轻松。但是BLToolkit内部仍然有很多我根本不使用甚至不理解的可能性(问题中也指出了原因)。
最好的选择是微型 ORM工具。也许将它们称为微对象映射器会更好。他们都有相同的目标:简单和极速。他们没有遵循他们的大同胞 ORM 的NoSQL范式,所以大多数时候我们必须(几乎)每天编写 TSQL 来支持他们的请求。他们获取数据并将它们映射到对象(有时会提供更多信息 - 请查看下方)。
我想指出其中的 3 个。它们都在单个代码文件中提供,而不是作为编译的 DLL:
- Dapper - 由Stackoverflow本身使用;它实际上所做的一切都提供了通用扩展方法,
IDbConnection
这意味着它支持任何支持数据存储,只要有一个实现IDbConnection
接口的连接类;
- 使用参数化 SQL
- 映射到静态类型以及
dynamic
(.net 4+)
- 支持映射到每个结果记录的多个对象(如 1-1 关系,即
Person
+ Address
)
- 支持多结果集对象映射
- 支持存储过程
- 生成、编译 (MSIL) 和缓存映射 - 如果您使用大量类型,这也可能是不利的)
- Massive - 由 Rob Connery 撰写;
- 仅支持
dynamic
类型映射(.net 3.5 或更早版本不支持)
- 非常小(几百行代码)
- 提供
DynamicModel
您的实体继承的类,并提供 CRUD 功能或来自任意裸机 TSQL 的映射
- 隐式分页支持
- 支持列名映射(但每次访问数据时都必须这样做,而不是声明性属性)
- 通过编写直接参数化的 TSQL 来支持存储过程
- PetaPoco - 启发了我的 Massive,但需要支持旧的框架版本
- 支持强类型以及
dynamic
- 提供 T4 模板来生成你的 POCO——你最终会得到与大型 ORM 类似的类(这意味着不支持代码优先) 但你不必使用这些你仍然可以编写自己的 POCO 类当然保持您的模型轻量级并且不包括仅数据库信息(即时间戳等)
- 与 Dapper 类似,它还编译映射以提高速度和重用性
- 支持 CRUD 操作 +
IsNew
- 隐式分页支持,返回一个特殊类型的页面充满数据+所有元数据(当前页面,所有页面/记录的数量)
- 具有适用于各种场景(日志记录、类型转换器等)的扩展点
- 支持声明性元数据(列/表映射等)
- 通过一些自动关系设置支持每个结果记录的多对象映射(与必须手动连接相关对象的 Dapper 不同)
- 支持存储过程
- 有一个帮助
SqlBuilder
类,可以更轻松地构建 TSQL 语句
在所有三个中,PetaPoco 似乎在开发方面是最活跃的,并且通过充分利用其他两个(以及其他一些)来支持大多数事情。
在所有三个中,Dapper 具有最佳的实际使用参考,因为它被世界上流量最高的站点之一使用:Stackoverflow。
它们都遭受魔术字符串问题的困扰,因为您大部分时间都将 SQL 查询直接写入它们。但其中一些可以通过 T4 缓解,因此您可以在 Visual Studio 中进行强类型调用,提供智能感知、编译时检查和动态重新生成。
dynamic
类型的缺点
我认为dynamic
类型的最大缺点是维护。想象一下您的应用程序使用动态类型。一段时间后查看自己的代码会变得相当有问题,因为您没有任何具体的类可以观察或坚持。尽管dynamic
类型是一种祝福,但从长远来看,它们也是一种诅咒。