protected virtual void MigrateAspectServices(DataDbContextAccessor <TAudit, TAuditProperty, TMigration, TTabulation, TTenant, TGenId, TIncremId, TCreatedBy> dbContextAccessor, Action migrateStructureAction) { IServicesManager <IMigrateAccessorAspect> aspects = null; // 数据迁移支持写入连接(包括未启用读写分离的默认连接)// 或启用数据同步的默认与写入连接(数据同步改为在 AccessorBatchExecutor 底层实现) if (dbContextAccessor.IsWritingConnectionString()) // || dbContextAccessor.CurrentTenant.DataSynchronization { aspects = dbContextAccessor.GetService <IServicesManager <IMigrateAccessorAspect> >(); aspects.ForEach(aspect => { if (aspect.Enabled) { aspect.PreProcess(dbContextAccessor); // 前置处理数据迁移 } }); } // 结构迁移支持写入连接(包括未启用读写分离的默认连接)或启用结构同步的默认与写入连接 if (dbContextAccessor.IsWritingConnectionString() || dbContextAccessor.CurrentTenant.StructureSynchronization) { migrateStructureAction.Invoke(); } if (aspects.IsNotNull()) { aspects.ForEach(aspect => { if (aspect.Enabled) { aspect.PostProcess(dbContextAccessor); // 后置处理数据迁移 } }); } }