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