コード例 #1
0
        protected virtual void CreateOrMigrate(TenantBase tenant)
        {
            var args = new DbPerTenantConnectionStringResolveArgs(
                tenant == null ? (int?)null : (int?)tenant.Id,
                tenant == null ? MultiTenancySides.Host : MultiTenancySides.Tenant
                );

            args["DbContextType"]         = typeof(TDbContext);
            args["DbContextConcreteType"] = typeof(TDbContext);

            var nameOrConnectionString = ConnectionStringHelper.GetConnectionString(_connectionStringResolver.GetNameOrConnectionString(args));

            using (var uow = _unitOfWorkManager.Begin(TransactionScopeOption.Suppress))
            {
                using (var dbContext = _iocResolver.ResolveAsDisposable <TDbContext>(new { nameOrConnectionString = nameOrConnectionString }))
                {
                    var dbInitializer = new MigrateDatabaseToLatestVersion <TDbContext, TConfiguration>(
                        true,
                        new TConfiguration
                    {
                        Tenant = tenant
                    });

                    dbInitializer.InitializeDatabase(dbContext.Object);

                    _unitOfWorkManager.Current.SaveChanges();
                    uow.Complete();
                }
            }
        }
コード例 #2
0
        protected virtual void CreateOrMigrate(AbpTenantBase tenant)
        {
            var args = new DbPerTenantConnectionStringResolveArgs(
                tenant == null ? (int?)null : (int?)tenant.Id,
                tenant == null ? MultiTenancySides.Host : MultiTenancySides.Tenant
                );

            args["DbContextType"]         = typeof(TDbContext);
            args["DbContextConcreteType"] = typeof(TDbContext);

            var nameOrConnectionString = ConnectionStringHelper.GetConnectionString(_connectionStringResolver.GetNameOrConnectionString(args));

            using (var uow = _unitOfWorkManager.Begin(TransactionScopeOption.Suppress))
            {
                using (var dbContext = _iocResolver.ResolveAsDisposable <TDbContext>(new { nameOrConnectionString = nameOrConnectionString }))
                {
                    //TODO: Please comple the logic of migrations
                    dbContext.Object.Database.Migrate();


                    _unitOfWorkManager.Current.SaveChanges();
                    uow.Complete();
                }
            }
        }
コード例 #3
0
        protected virtual void CreateOrMigrate(CodeZeroTenantBase tenant, Action <TDbContext> seedAction)
        {
            var args = new DbPerTenantConnectionStringResolveArgs(
                tenant == null ? (int?)null : (int?)tenant.Id,
                tenant == null ? MultiTenancySides.Host : MultiTenancySides.Tenant
                );

            args["DbContextType"]         = typeof(TDbContext);
            args["DbContextConcreteType"] = typeof(TDbContext);

            var nameOrConnectionString = ConnectionStringHelper.GetConnectionString(
                _connectionStringResolver.GetNameOrConnectionString(args)
                );

            using (var uow = _unitOfWorkManager.Begin(TransactionScopeOption.Suppress))
            {
                using (var dbContext = _dbContextResolver.Resolve <TDbContext>(nameOrConnectionString, null))
                {
                    dbContext.Database.Migrate();
                    seedAction?.Invoke(dbContext);
                    _unitOfWorkManager.Current.SaveChanges();
                    uow.Complete();
                }
            }
        }
コード例 #4
0
        /// <summary>
        /// Update the database
        /// </summary>
        private void CreateOrMigrate(AbpTenantBase tenant, Action seedAction)
        {
            var args = new DbPerTenantConnectionStringResolveArgs(
                tenant == null ? (int?)null : (int?)tenant.Id,
                tenant == null ? MultiTenancySides.Host : MultiTenancySides.Tenant
                );

            //args["DbContextType"] = typeof(TDbContext);
            //args["DbContextConcreteType"] = typeof(TDbContext);

            var connectionString = GetConnectionString(
                _connectionStringResolver.GetNameOrConnectionString(args)
                );

            // Put the database update into a scope to ensure
            // that all resources will be disposed.
            using var scope = CreateServices(connectionString).CreateScope();

            // Instantiate the runner
            var runner = scope.ServiceProvider.GetRequiredService <IMigrationRunner>();

            try
            {
                // Execute the migrations
                runner.MigrateUp();
            }
            catch (Exception e)
            {
                throw;
            }
        }
コード例 #5
0
        public virtual string GetNameOrConnectionString(DbPerTenantConnectionStringResolveArgs args)
        {
            if (args.TenantId == null)
            {
                //Requested for host
                return(base.GetNameOrConnectionString(args));
            }
            var tenantCacheItem = _tenantCache.Get(args.TenantId.Value);

            if (tenantCacheItem.ConnectionString.IsNullOrEmpty())
            {
                //Tenant has not dedicated database
                return(base.GetNameOrConnectionString(args));
            }
            return(tenantCacheItem.ConnectionString);
        }
コード例 #6
0
 public async Task <string> GetNameOrConnectionStringAsync(DbPerTenantConnectionStringResolveArgs args)
 {
     return(await Task.FromResult(GetNameOrConnectionString(args)));
 }
コード例 #7
0
 public string GetNameOrConnectionString(DbPerTenantConnectionStringResolveArgs args)
 {
     return(_nhModule.ConnectionString);
 }
コード例 #8
0
 public override string GetNameOrConnectionString(DbPerTenantConnectionStringResolveArgs args)
 {
     return(base.GetNameOrConnectionString(args));
 }