菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
105
0

ABP 数据迁移

原创
05/13 14:22
阅读数 82243

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

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

/// <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();
                }
            }
        }
    }

 

发表评论

0/200
105 点赞
0 评论
收藏