数据存储
EFCore 实体命名约定库:EFCore.NamingConventions
在软件开发中,数据库是一个重要话题,有不同的流派,一些人支持手写SQL,另一些喜欢ORM。介绍了EFCore.NamingConventions库,可在EFCore中指定实体命名约束规则,简化属性与数据库表字段映射,提高团队效率。示例展示了使用SnakeCaseNamingConvention生成数据库表字段,强调约定大于配置的重要性。团队应记录数据库规范,以避免配置混乱或新人不了解约定。这个库有利于标准化命名,提高开发效率。
数据存储
浅议 EF Core 分库分表及多租户架构的实现
Payne在他的博客中探讨了在EF Core中实施分库、分表和多租户架构的可能性。他介绍了分库、分表的目的是提高数据库查询性能,讨论了路由策略以及可能带来的问题。针对多租户架构,他展示了如何使用`HasQueryFilter()`方法在单数据库中实现多租户隔离。最后,他强调了这些方法的适用性与潜在问题,并鼓励读者根据业务需求进行取舍。 Payne的博客提供了深入的技术讨论,展示了他对技术的追求和探索精神。
数据存储
通过 EF/Dapper 扩展实现数据库审计功能
本文讨论了数据库审计的重要性和实现方式。审计是一种记录数据表中数据变更的机制,有助于追溯数据变更历史、通知相关人员以及排查错误数据。文章首先介绍了 EF 和 EF Core 中的实体跟踪功能,通过重写 DbContext 的 SaveChanges() 方法,利用 ChangeTracker 来捕获实体字段的变化,实现审计日志记录。然后,针对 Dapper 这类轻量级 ORM,提出了使用 Castle 动态代理库实现接口拦截,记录审计日志的方案。此外,文中还探讨了领域事件在数据同步中的应用,强调通过事件驱动来处理数据变更,可提高效率并减少代码耦合。最后,文章总结了 EF Core 和 Dapper 实现审计功能的方法,并提出了基于领域事件的同步策略,以优化数据同步过程。
数据存储
基于 EF 的数据库主从复制、读写分离实现
本文介绍了实现数据库主从复制和读写分离的重要性和方法。主从复制通过创建与主数据库完全相同的从数据库来提供数据服务的连续性和提高性能。文章以 MySQL 为例,解释了主从复制的工作原理,包括二进制日志(binlog)和线程的交互。在ORM层面上,通过Entity Framework (EF) 中的 DbCommandInterceptor 拦截 SQL 命令,可以实现读写分离:所有 Select 查询操作通过从库执行,而 Insert/Update/Delete 操作通过主库执行。文章提供了具体的代码实现,包括主从库管理类 MasterSlaveManager 和拦截器 MasterSlaveDbInterceptor 的定义和使用。最后,讨论了在实际应用中可能遇到的问题,如事务处理、数据库连接管理以及在一主多从的情况下进行健康检查和负载均衡,鼓励读者深入研究这些高级主题。
编程语言
记通过 EF 生成不同数据库 SQL 脚本的一次尝试
本文讨论了使用 Entity Framework(EF)生成不同数据库 SQL 脚本的方法。作者首先介绍了数据库和面向对象之间的天然阻抗,以及 ORM 和 SQL 之间的争论。他提出了使用 ORM 生成 SQL 脚本的解决方案,并详细讨论了在 EF6 和 EF Core 中实现这一目标的不同方法。对于EF6,作者展示了如何通过继承 DbCommandInterceptor 类并重写方法来创建拦截器,从而记录 ORM 生成的 INSERT 和UPDATE SQL 语句。对于 EF Core,由于缺乏拦截器,作者介绍了如何通过实现 ILogger 接口和 ILoggerProvider 接口来注入自定义日志记录器,以捕获 EF 生成的 SQL 语句。文章最后总结了使用 EF 生成SQL 脚本的好处,并提出了对日志记录功能的进一步应用,如数据库的主从复制和读写分离,这些将在后续博客中讨论。1