ABP 数据迁移

我主要是在项目部署的时候、当添加一个租户的时候、那么租户是有一个单独的数据库。而我的并没有用多租户单数据库。

因此我的模块里面有一个领域事件 当租户添加时将生前表生成到对应的数据库中。如果那位网友有更好的方式请留言回复。

/// <summary>
    /// 当多租户信息添加时 
    /// 更新并且添加本地数据文件
    /// </summary>
    public class TenancyEventsManager:ISingletonDependency, 
    IEventHandler<EntityCreatedEventData<Tenant>>{
        
        private readonly IIocResolver _iocResolver;
        private readonly IUnitOfWorkManager _unitOfWorkManager;

        public TenancyEventsManager(IIocResolver iocResolver, IUnitOfWorkManager unitOfWorkManager)
        {
            _iocResolver = iocResolver;
            _unitOfWorkManager = unitOfWorkManager;
        }

        public void HandleEvent(EntityCreatedEventData<Tenant> eventData)
        {    
            //默认是加密、这里要解密连接字符串
            string connection = SimpleStringCipher.Instance.Decrypt(eventData.Entity.ConnectionString);
            using (var uow=_unitOfWorkManager.Begin(TransactionScopeOption.Suppress))
            {
                using (var dbContext = _iocResolver.ResolveAsDisposable<IMSDbContext>(new {nameOrConnectionString=connection}))
                {
                    var dbInitializer = new MigrateDatabaseToLatestVersion<IMSDbContext, Migrations.Configuration>(true, new Configuration() { Tenant = eventData.Entity});

                    dbInitializer.InitializeDatabase(dbContext.Object);
                    _unitOfWorkManager.Current.SaveChanges();

                    uow.Complete();
                }
            }
        }
    }

 

posted @ 2017-11-02 16:43  在 水 一 方  阅读(1358)  评论(0编辑  收藏  举报