public virtual string GetNameOrConnectionString(ConnectionStringResolveArgs args)
        {
            if (args == null)
            {
                throw new ArgumentNullException(nameof(args));
            }

            string defaultConnectionString = _configuration.DefaultNameOrConnectionString;

            if (!string.IsNullOrWhiteSpace(defaultConnectionString))
            {
                return(defaultConnectionString);
            }

            if (ConfigurationManager.ConnectionStrings["Default"] != null)
            {
                return("Default");
            }

            if (ConfigurationManager.ConnectionStrings.Count == 1)
            {
                return(ConfigurationManager.ConnectionStrings[0].ConnectionString);
            }

            throw new StoveException("Could not find a connection string definition for the application. Set IStoveStartupConfiguration.DefaultNameOrConnectionString or add a 'Default' connection string to application .config file.");
        }
        public virtual string GetNameOrConnectionString(ConnectionStringResolveArgs args)
        {
            if (args == null)
            {
                throw new ArgumentNullException("args");
            }

            var defaultConnectionString = _configuration.DefaultNameOrConnectionString;
            if (!string.IsNullOrWhiteSpace(defaultConnectionString))
            {
                return defaultConnectionString;
            }

            if (ConfigurationManager.ConnectionStrings["Default"] != null)
            {
                return "Default";
            }

            if (ConfigurationManager.ConnectionStrings.Count == 1)
            {
                return ConfigurationManager.ConnectionStrings[0].ConnectionString;
            }

            throw new AbpException("Could not find a connection string definition for the application. Set IAbpStartupConfiguration.DefaultNameOrConnectionString or add a 'Default' connection string to application .config file.");
        }
        public virtual TDbContext GetOrCreateDbContext <TDbContext>(MultiTenancySides?multiTenancySide = null)
            where TDbContext : DbContext
        {
            var concreteDbContextType = _dbContextTypeMatcher.GetConcreteType(typeof(TDbContext));

            var connectionStringResolveArgs = new ConnectionStringResolveArgs(multiTenancySide);

            connectionStringResolveArgs["DbContextType"]         = typeof(TDbContext);
            connectionStringResolveArgs["DbContextConcreteType"] = concreteDbContextType;
            var connectionString = ResolveConnectionString(connectionStringResolveArgs);

            var dbContextKey = concreteDbContextType.FullName + "#" + connectionString;

            DbContext dbContext;

            if (!ActiveDbContexts.TryGetValue(dbContextKey, out dbContext))
            {
                dbContext = _dbContextResolver.Resolve <TDbContext>(connectionString);

                //TODO: Object materialize event
                //TODO: Apply current filters to this dbcontext

                if (Options.IsTransactional == true)
                {
                    BeginTransaction(dbContext);
                }

                ActiveDbContexts[dbContextKey] = dbContext;
            }

            return((TDbContext)dbContext);
        }
示例#4
0
        public virtual void CreateOrMigrate(Action <string> logger)
        {
            var args = new ConnectionStringResolveArgs
            {
                ["DbContextType"]         = typeof(TDbContext),
                ["DbContextConcreteType"] = typeof(TDbContext)
            };

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

            logger($"Name or ConnectionString: {nameOrConnectionString}\nCurrent DbContext: {typeof(TDbContext).GetTypeInfo().Name}");

            using (IUnitOfWorkCompleteHandle uow = _unitOfWorkManager.Begin(new UnitOfWorkOptions
            {
                Timeout = TimeSpan.FromSeconds(_configuration.TransactionTimeout)
            })
                   )
            {
                _migrationStrategies.ForEach(strategy =>
                {
                    logger("--------------------------------------------------------");

                    strategy.Migrate <TDbContext, TConfiguration>(nameOrConnectionString, MigrationAssembly, logger);
                });

                _unitOfWorkManager.Current.SaveChanges();
                uow.Complete();
            }
        }
示例#5
0
        /// <summary>
        /// 获取或创建数据库上下文
        /// </summary>
        /// <typeparam name="TDbContext">数据库上下文对象</typeparam>
        /// <param name="multiTenancySide">多租户双方中的一方</param>
        /// <returns>数据库上下文对象</returns>
        public virtual TDbContext GetOrCreateDbContext <TDbContext>(MultiTenancySides?multiTenancySide = null)
            where TDbContext : DbContext
        {
            var concreteDbContextType = _dbContextTypeMatcher.GetConcreteType(typeof(TDbContext));

            var connectionStringResolveArgs = new ConnectionStringResolveArgs(multiTenancySide);

            connectionStringResolveArgs["DbContextType"]         = typeof(TDbContext);
            connectionStringResolveArgs["DbContextConcreteType"] = concreteDbContextType;
            var connectionString = ResolveConnectionString(connectionStringResolveArgs);

            var dbContextKey = concreteDbContextType.FullName + "#" + connectionString;

            DbContext dbContext;

            if (!ActiveDbContexts.TryGetValue(dbContextKey, out dbContext))
            {
                dbContext = _dbContextResolver.Resolve <TDbContext>(connectionString);

                ((IObjectContextAdapter)dbContext).ObjectContext.ObjectMaterialized += (sender, args) =>
                {
                    ObjectContext_ObjectMaterialized(dbContext, args);
                };

                FilterExecuter.As <IEfUnitOfWorkFilterExecuter>().ApplyCurrentFilters(this, dbContext);

                ActiveDbContexts[dbContextKey] = dbContext;
            }

            return((TDbContext)dbContext);
        }
示例#6
0
        public virtual TDbContext GetOrCreateDbContext <TDbContext>()
            where TDbContext : DbContext
        {
            Type concreteDbContextType = _dbContextTypeMatcher.GetConcreteType(typeof(TDbContext));

            var connectionStringResolveArgs = new ConnectionStringResolveArgs();

            connectionStringResolveArgs["DbContextType"]         = typeof(TDbContext);
            connectionStringResolveArgs["DbContextConcreteType"] = concreteDbContextType;
            string connectionString = ResolveConnectionString(connectionStringResolveArgs);

            string dbContextKey = concreteDbContextType.FullName + "#" + connectionString;

            DbContext dbContext;

            if (!ActiveDbContexts.TryGetValue(dbContextKey, out dbContext))
            {
                if (Options.IsTransactional == true)
                {
                    dbContext = _transactionStrategy.CreateDbContext <TDbContext>(connectionString, _dbContextResolver);
                }
                else
                {
                    dbContext = _dbContextResolver.Resolve <TDbContext>(connectionString);
                }

                ((IObjectContextAdapter)dbContext).ObjectContext.ObjectMaterialized += (sender, args) => { ObjectContext_ObjectMaterialized(dbContext, args); };

                FilterExecuter.As <IEfUnitOfWorkFilterExecuter>().ApplyCurrentFilters(this, dbContext);

                ActiveDbContexts[dbContextKey] = dbContext;
            }

            return((TDbContext)dbContext);
        }
示例#7
0
        public override string GetNameOrConnectionString(ConnectionStringResolveArgs args)
        {
            var configuration    = AppConfigurations.Get(_env.ContentRootPath, _env.EnvironmentName);
            var connectionString = AppConfigurations.GetConnectionString(args["DbContextType"]?.ToString(), configuration);

            return(connectionString);
        }
示例#8
0
 public override string GetNameOrConnectionString(ConnectionStringResolveArgs args)
 {
     if (args.MultiTenancySide == MultiTenancySides.Host)
     {
         return(GetNameOrConnectionString(new DbPerTenantConnectionStringResolveArgs(null, args)));
     }
     return(GetNameOrConnectionString(new DbPerTenantConnectionStringResolveArgs(GetCurrentTenantId(), args)));
 }
        public override string GetNameOrConnectionString(ConnectionStringResolveArgs args)
        {
            if (args.MultiTenancySide == MultiTenancySides.Host)
            {
                return GetNameOrConnectionString(new DbPerTenantConnectionStringResolveArgs(null, args));
            }

            return GetNameOrConnectionString(new DbPerTenantConnectionStringResolveArgs(GetCurrentTenantId(), args));
        }
        public virtual TDbContext GetOrCreateDbContext <TDbContext>(MultiTenancySides?multiTenancySide = null)
            where TDbContext : DbContext
        {
            var concreteDbContextType = _dbContextTypeMatcher.GetConcreteType(typeof(TDbContext));

            var connectionStringResolveArgs = new ConnectionStringResolveArgs(multiTenancySide);

            connectionStringResolveArgs["DbContextType"]         = typeof(TDbContext);
            connectionStringResolveArgs["DbContextConcreteType"] = concreteDbContextType;
            var connectionString = ResolveConnectionString(connectionStringResolveArgs);

            var dbContextKey = concreteDbContextType.FullName + "#" + connectionString;

            DbContext dbContext;

            if (!ActiveDbContexts.TryGetValue(dbContextKey, out dbContext))
            {
                dbContext = _dbContextResolver.Resolve <TDbContext>(connectionString);
                //((IObjectContextAdapter)dbContext).ObjectContext.ObjectMaterialized += (sender, args) =>
                //{
                //    ObjectContext_ObjectMaterialized(dbContext, args);
                //};

                //foreach (var filter in Filters)
                //{
                //    if (filter.IsEnabled)
                //    {
                //        dbContext.EnableFilter(filter.FilterName);
                //    }
                //    else
                //    {
                //        dbContext.DisableFilter(filter.FilterName);
                //    }

                //    foreach (var filterParameter in filter.FilterParameters)
                //    {
                //        if (TypeHelper.IsFunc<object>(filterParameter.Value))
                //        {
                //            dbContext.SetFilterScopedParameterValue(filter.FilterName, filterParameter.Key, (Func<object>)filterParameter.Value);
                //        }
                //        else
                //        {
                //            dbContext.SetFilterScopedParameterValue(filter.FilterName, filterParameter.Key, filterParameter.Value);
                //        }
                //    }
                //}

                if (Options.IsTransactional == true)
                {
                    BeginTransaction(dbContext);
                }

                ActiveDbContexts[dbContextKey] = dbContext;
            }

            return((TDbContext)dbContext);
        }
        public override async Task <string> GetNameOrConnectionStringAsync(ConnectionStringResolveArgs args)
        {
            if (args.MultiTenancySide == MultiTenancySides.Host)
            {
                return(await GetNameOrConnectionStringAsync(new DbPerTenantConnectionStringResolveArgs(null, args)));
            }

            return(await GetNameOrConnectionStringAsync(new DbPerTenantConnectionStringResolveArgs(GetCurrentTenantId(), args)));
        }
        public override string GetNameOrConnectionString(ConnectionStringResolveArgs args)
        {
            if (args["DbContextConcreteType"] as Type == typeof(TEST1Context))
            {
                return("Server=localhost; Database=TEST1; Trusted_Connection=True;");
            }

            return(base.GetNameOrConnectionString(args));
        }
示例#13
0
 private string GetConnectionStringName(ConnectionStringResolveArgs args)
 {
     //var type = args["DbContextConcreteType"] as Type;
     //if (type == typeof(MASTERDATADbContext))
     //{
     //    return DxpConsts.MDConnectionString;//返回数据库二的节点名称
     //}
     return(null);//采用默认数据库
 }
示例#14
0
        public override string GetNameOrConnectionString(ConnectionStringResolveArgs args)
        {
            if (args["DbContextConcreteType"] as Type == typeof(SDIMDbContext))
            {
                return(_appConfiguration.GetConnectionString(SMICConsts.SDIMConnectionStringName));
            }

            return(base.GetNameOrConnectionString(args));
        }
        public override string GetNameOrConnectionString(ConnectionStringResolveArgs args)
        {
            if (args["DbContextConcreteType"] as Type == typeof(MultipleDbContextEfCoreDemoSecondDbContext))
            {
                return(_appConfiguration.GetConnectionString(MultipleDbContextEfCoreDemoConsts.SecondDbConnectionStringName));
            }

            return(base.GetNameOrConnectionString(args));
        }
示例#16
0
        public string GetNameOrConnectionString(ConnectionStringResolveArgs args)
        {
            if (_configuration.TypedConnectionStrings.TryGetValue((Type)args["SessionContextType"], out string connectionString))
            {
                return(connectionString);
            }

            throw new StoveException("Could not find StoveSessionContextType to resolve connection string!");
        }
示例#17
0
        public override string GetNameOrConnectionString(ConnectionStringResolveArgs args)
        {
            var connectStringName = GetConnectionStringName(args);

            if (connectStringName != null)
            {
                return(_root.GetConnectionString(connectStringName));
            }
            return(base.GetNameOrConnectionString(args));
        }
示例#18
0
        public DbPerTenantConnectionStringResolveArgs(int?tenantId, ConnectionStringResolveArgs baseArgs)
        {
            TenantId         = tenantId;
            MultiTenancySide = baseArgs.MultiTenancySide;

            foreach (var kvPair in baseArgs)
            {
                Add(kvPair.Key, kvPair.Value);
            }
        }
        public override string GetNameOrConnectionString(ConnectionStringResolveArgs args)
        {
            if (args["DbContextConcreteType"] as Type == typeof(SecondDbContext))
            {
                var configuration = AppConfigurations.Get(WebContentDirectoryFinder.CalculateContentRootFolder());
                return(configuration.GetConnectionString(MultipleDbContextEfCoreDemoConsts.SecondDbConnectionStringName));
            }

            return(base.GetNameOrConnectionString(args));
        }
        public DbPerTenantConnectionStringResolveArgs(int? tenantId, ConnectionStringResolveArgs baseArgs)
        {
            TenantId = tenantId;
            MultiTenancySide = baseArgs.MultiTenancySide;

            foreach (var kvPair in baseArgs)
            {
                Add(kvPair.Key, kvPair.Value);
            }
        }
示例#21
0
 /// <summary>
 ///     获取连接字符串
 /// </summary>
 /// <param name="args"></param>
 /// <returns></returns>
 public string GetNameOrConnectionString(ConnectionStringResolveArgs args)
 {
     //if (!args.ContainsKey(DbContextTypeKey))
     //    return _config.DefaultNameOrConnectionString;
     //var dbContextType = args[DbContextTypeKey] as Type;
     //if (dbContextType != null && _dbContextMapper.ContainsKey(dbContextType))
     //    return _dbConnectionStringResolver.ResolveConnectionString(_dbContextMapper[dbContextType]);
     //return _dbConnectionStringResolver.ResolveConnectionString(DbConfigType.Identity);
     return(@"data source=(localdb)\MSSQLLocalDB;initial catalog=CockQuartz;Integrated Security=True;MultipleActiveResultSets=True;App=EntityFramework");
 }
示例#22
0
        public virtual string GetNameOrConnectionString(ConnectionStringResolveArgs args)
        {
            string defaultNameOrConnectionString = _configuration.DefaultSettings.GetDefaultNameOrConnectionString();

            if (!string.IsNullOrWhiteSpace(defaultNameOrConnectionString))
            {
                return(defaultNameOrConnectionString);
            }
            return(defaultNameOrConnectionString);
        }
        private string GetConnectionStringName(ConnectionStringResolveArgs args)
        {
            var type = args["DbContextConcreteType"] as Type;

            if (dbConnectionStrings.ContainsKey(type))
            {
                return(dbConnectionStrings[type]);
            }
            return(null);
        }
示例#24
0
        private string GetConnectionStringName(ConnectionStringResolveArgs args)
        {
            var type = args["DbContextConcreteType"] as Type;

            if (type == typeof(TaobaoAuthorizedDbContext))
            {
                return(TaobaoAuthorizationConsts.AuthorizedConnectionStringName);
            }
            return(null);
        }
        public override string GetNameOrConnectionString(ConnectionStringResolveArgs args)
        {
            if (args["DbContextConcreteType"] as Type == typeof(AuditLogDbContext))
            {
                var configuration = AppConfigurations.Get(WebContentDirectoryFinder.CalculateContentRootFolder());
                return(configuration.GetConnectionString(MetroStationConsts.AuditLogConnectionStringName));
            }

            return(base.GetNameOrConnectionString(args));
        }
示例#26
0
        public override string GetNameOrConnectionString(ConnectionStringResolveArgs args)
        {
            var connectString = string.Empty;

            if (dicConnection.TryGetValue(args["DbContextConcreteType"] as Type, out connectString))
            {
                return(connectString);
            }
            return(base.GetNameOrConnectionString(args));
        }
示例#27
0
        public override string GetNameOrConnectionString(ConnectionStringResolveArgs args)
        {
            var type = args["DbContextConcreteType"] as Type;

            if (type == typeof(DIME2BarcodeContext))
            {
                return(ConfigurationManager.ConnectionStrings["DIME2BarcodeContainer"].ConnectionString);
            }

            return(base.GetNameOrConnectionString(args));
        }
        public override string GetNameOrConnectionString(ConnectionStringResolveArgs args)
        {
            var connectStringName = this.GetConnectionStringName(args);

            if (connectStringName != null)
            {
                var configuration = AppConfigurations.Get(WebContentDirectoryFinder.CalculateContentRootFolder(), _env.EnvironmentName, _env.IsDevelopment());
                return(configuration.GetConnectionString(connectStringName));
            }
            return(base.GetNameOrConnectionString(args));
        }
示例#29
0
        public TDbContext GetDbContext <TDbContext>()
            where TDbContext : DbContext
        {
            var connectionStringResolveArgs = new ConnectionStringResolveArgs() //MultiTenancySides
            {
                ["DbContextType"] = typeof(TDbContext)
            };
            var connectionString = _connectionStringResolver.GetNameOrConnectionString(connectionStringResolveArgs);

            return(_dbContextResolver.Resolve <TDbContext>(connectionString, null));
        }
示例#30
0
        public override string GetNameOrConnectionString(ConnectionStringResolveArgs args)
        {
            var type = args["DbContextConcreteType"] as Type;

            if (type == typeof(Dime2barcodeContext))
            {
                var configuration = AppConfigurations.Get(WebContentDirectoryFinder.CalculateContentRootFolder());
                return(configuration.GetConnectionString("DIME2Barcode"));
            }

            return(base.GetNameOrConnectionString(args));
        }
示例#31
0
        public virtual string GetNameOrConnectionString(ConnectionStringResolveArgs args)
        {
            Throw.IfArgumentNull(args, nameof(args));

            var defaultConnectionString = _configuration.DefaultNameOrConnectionString;

            if (!string.IsNullOrWhiteSpace(defaultConnectionString))
            {
                return(defaultConnectionString);
            }

            throw new AppException("Could not find a connection string definition for the application. Set IConfigure.DefaultNameOrConnectionString or add a 'Default' connection string to application .config file.");
        }
示例#32
0
        public virtual TDbContext GetOrCreateDbContext <TDbContext>(MultiTenancySides?multiTenancySide = null, string name = null)
            where TDbContext : DbContext
        {
            var concreteDbContextType = _dbContextTypeMatcher.GetConcreteType(typeof(TDbContext));

            var connectionStringResolveArgs = new ConnectionStringResolveArgs(multiTenancySide);

            connectionStringResolveArgs["DbContextType"]         = typeof(TDbContext);
            connectionStringResolveArgs["DbContextConcreteType"] = concreteDbContextType;
            var connectionString = ResolveConnectionString(connectionStringResolveArgs);

            var dbContextKey = concreteDbContextType.FullName + "#" + connectionString;

            if (name != null)
            {
                dbContextKey += "#" + name;
            }

            DbContext dbContext;

            if (!ActiveDbContexts.TryGetValue(dbContextKey, out dbContext))
            {
                if (Options.IsTransactional == true)
                {
                    dbContext = _transactionStrategy.CreateDbContext <TDbContext>(connectionString, _dbContextResolver);
                }
                else
                {
                    dbContext = _dbContextResolver.Resolve <TDbContext>(connectionString);
                }

                if (Options.Timeout.HasValue && !dbContext.Database.CommandTimeout.HasValue)
                {
                    dbContext.Database.CommandTimeout = Options.Timeout.Value.TotalSeconds.To <int>();
                }

                if (Clock.SupportsMultipleTimezone)
                {
                    ((IObjectContextAdapter)dbContext).ObjectContext.ObjectMaterialized += (sender, args) =>
                    {
                        ObjectContext_ObjectMaterialized(dbContext, args);
                    };
                }

                FilterExecuter.As <IEfUnitOfWorkFilterExecuter>().ApplyCurrentFilters(this, dbContext);

                ActiveDbContexts[dbContextKey] = dbContext;
            }

            return((TDbContext)dbContext);
        }
示例#33
0
        public virtual TDbContext GetOrCreateDbContext <TDbContext>(MultiTenancySides?multiTenancySide = null)
            where TDbContext : DbContext
        {
            var connectionStringResolveArgs = new ConnectionStringResolveArgs(multiTenancySide);

            connectionStringResolveArgs["DbContextType"] = typeof(TDbContext);
            var connectionString = ResolveConnectionString(connectionStringResolveArgs);

            var dbContextKey = typeof(TDbContext).FullName + "#" + connectionString;

            DbContext dbContext;

            if (!ActiveDbContexts.TryGetValue(dbContextKey, out dbContext))
            {
                dbContext = _dbContextResolver.Resolve <TDbContext>(connectionString);

                ((IObjectContextAdapter)dbContext).ObjectContext.ObjectMaterialized += (sender, args) =>
                {
                    ObjectContext_ObjectMaterialized(dbContext, args);
                };

                foreach (var filter in Filters)
                {
                    if (filter.IsEnabled)
                    {
                        dbContext.EnableFilter(filter.FilterName);
                    }
                    else
                    {
                        dbContext.DisableFilter(filter.FilterName);
                    }

                    foreach (var filterParameter in filter.FilterParameters)
                    {
                        if (TypeHelper.IsFunc <object>(filterParameter.Value))
                        {
                            dbContext.SetFilterScopedParameterValue(filter.FilterName, filterParameter.Key, (Func <object>)filterParameter.Value);
                        }
                        else
                        {
                            dbContext.SetFilterScopedParameterValue(filter.FilterName, filterParameter.Key, filterParameter.Value);
                        }
                    }
                }

                ActiveDbContexts[dbContextKey] = dbContext;
            }

            return((TDbContext)dbContext);
        }
示例#34
0
 protected virtual string ResolveConnectionString(ConnectionStringResolveArgs args)
 {
     return ConnectionStringResolver.GetNameOrConnectionString(args);
 }