编程语言
温故而知新,由 ADO.NET 与 Dapper 所联想到的
这篇文章讨论了在维护一个"遗产项目"时遇到的困难,其中数据持久化层完全由 ADO.NET 手工构建,导致大量使用 DataTable 进行数据操作,与习惯使用 Entity Framework 的开发者产生不适。作者提到了 ADO.NET 的核心组件,介绍了 DbConnection、DbCommand、DbDataReader、DbDataAdapter、DataTable 和 DataSet 的作用。讨论了使用 ADO.NET 访问数据库的常用方法和设计理念。然后作者提到了希望改进这种情况,类似于 Dapper 的实现,引入了一个简化版的 DynamicRow 类来实现类似 DapperRow 的效果。最后,作者介绍了如何通过扩展方法实现类似 Dapper 的 Query 和 Execute 方法,以及简化版的参数化查询。整体文章展示了作者对 ADO.NET、Dapper 和 Dynamic 的思考,并提出了自己的改进方案。
数据存储
Dapper.Contrib 在 Oracle 环境下引发 ORA-00928 异常问题的解决
本文讨论了在使用 Dapper.Contrib 操作 Oracle 数据库时遇到的 ORA-XXXXX 错误,根本原因在于 Dapper.Contrib 未实现 OracleSqlAdapter,这与对自增 ID 的支持导致的 SQL 标准差异有关。文章指出不同数据库对自增 ID 实现方式不同,Oracle 需要序列,增加了维护工作量,且 Dapper.Contrib 底层设计不合理,缺乏扩展接口,违反开闭原则。作者提出了解决方法,包括自定义OracleSqlAdapter和扩展方法,以适配Oracle环境下的Dapper.Contrib使用。
数据存储
通过 EF/Dapper 扩展实现数据库审计功能
本文讨论了数据库审计的重要性和实现方式。审计是一种记录数据表中数据变更的机制,有助于追溯数据变更历史、通知相关人员以及排查错误数据。文章首先介绍了 EF 和 EF Core 中的实体跟踪功能,通过重写 DbContext 的 SaveChanges() 方法,利用 ChangeTracker 来捕获实体字段的变化,实现审计日志记录。然后,针对 Dapper 这类轻量级 ORM,提出了使用 Castle 动态代理库实现接口拦截,记录审计日志的方案。此外,文中还探讨了领域事件在数据同步中的应用,强调通过事件驱动来处理数据变更,可提高效率并减少代码耦合。最后,文章总结了 EF Core 和 Dapper 实现审计功能的方法,并提出了基于领域事件的同步策略,以优化数据同步过程。1