示例#1
0
        //public IQueryCache QueryCache { get; }

        public DatabaseService(IConnectionStringManager connectionStringManager)
        {
            //QueryCache = queryCache;

            Connection = new SqlConnection(connectionStringManager.AppDatabase);
            Connection.Open();
        }
示例#2
0
 public TestDatabase(IConnectionStringManager connectionStringManager,
                     IDatabaseNameGenerator databaseNameGenerator, IConnection connection)
 {
     _connectionStringManager = connectionStringManager;
     _databaseNameGenerator   = databaseNameGenerator;
     _connection = connection;
 }
示例#3
0
        public DatabaseBuilder ForVendor(IConnectionStringManager connectionStringManager, IDatabase database, ISession session)
        {
            _connectionStringManager = connectionStringManager;
            _database = database;
            _session  = session;

            return(this);
        }
示例#4
0
文件: BaseDAO.cs 项目: radtek/crm
        /// <summary>
        /// 构造函数
        /// </summary>
        public BaseDAO(T pUserInfo, IConnectionStringManager pConnectionStringManager)
        {
            this.CurrentUserInfo = pUserInfo;
            //创建SQL Helper
            string connectionString = pConnectionStringManager.GetConnectionStringBy(pUserInfo);
            var    sqlHelper        = new DefaultSQLHelper(connectionString);

            sqlHelper.CurrentUserInfo = pUserInfo;
            this.SQLHelper            = sqlHelper;
        }
示例#5
0
        public void ConfigureAndBuild(IConnectionStringManager connectionStringManager,
                                      IDictionary <string, object> properties, ISession session)
        {
            _connectionStringManager = connectionStringManager;
            _session = session;

            var createStatement = $"CREATE DATABASE {_connectionStringManager.TransientDatabaseName};";

            _session.Execute(_connectionStringManager.DefaultConnectionString, createStatement);
        }
示例#6
0
        public static Task <string> GetDefaultConnectionStringAsync(
            this IConnectionStringManager connectionStringManager,
            CancellationToken cancellationToken)
        {
            // Validate parameters.
            if (connectionStringManager == null)
            {
                throw new ArgumentNullException(nameof(connectionStringManager));
            }

            // Get the default connection string.
            return(connectionStringManager.GetConnectionStringAsync(DefaultConnectionStringName, cancellationToken));
        }
 public SQLiteDatabaseService(IKeywordService keywordService,
                              ILogService log,
                              IKeywordService reservedKeywordService,
                              IPluginManager pluginManager,
                              IConnectionStringManager csm
                              )
 {
     _pluginManager          = pluginManager;
     _reservedKeywordService = reservedKeywordService;
     _log = log;
     _connectionString = csm.Get();
     _keywordService   = keywordService;
 }
示例#8
0
        public void ConfigureAndBuild(IConnectionStringManager connectionStringManager, IDictionary <string, object> properties,
                                      ISession session)
        {
            _connectionStringManager = connectionStringManager;

            if (properties != null && properties.ContainsKey("TemplateDatabase"))
            {
                TemplateDatabase = (string)properties["TemplateDatabase"];
            }

            _session = session;

            _session.Execute(_connectionStringManager.DefaultConnectionString, BuildCreateStatement());
        }
示例#9
0
        public void should_call_correct_create_statement()
        {
            var defaultConnection = $"Server=localhost;Database={RandomData.RandomWord()}";
            var transientDatabase = RandomData.RandomWord();

            _connectionStringManager = new ConnectionStringManager();
            _connectionStringManager.ConfigureTransientConnectionString(defaultConnection, transientDatabase);

            var database = new Database();

            database.ConfigureAndBuild(_connectionStringManager, new Dictionary <string, object>(), _session);

            _session.Received(1).Execute(Arg.Is(defaultConnection),
                                         Arg.Is($"create database {transientDatabase};"));
        }
示例#10
0
        public void should_call_correct_exists_statements()
        {
            var defaultConnection = $"Server=localhost;Database={RandomData.RandomWord()}";
            var transientDatabase = RandomData.RandomWord();

            _connectionStringManager = new ConnectionStringManager();
            _connectionStringManager.ConfigureTransientConnectionString(defaultConnection, transientDatabase);

            var database = new Database();

            database.ConfigureAndBuild(_connectionStringManager, new Dictionary <string, object>(), _session);
            database.Exists();

            _session.Received(1).ExecuteReader(Arg.Is(_connectionStringManager.DefaultConnectionString),
                                               Arg.Is($"SHOW DATABASES LIKE '{_connectionStringManager.TransientDatabaseName}';"), out int x);
        }
示例#11
0
        public void should_call_scripts()
        {
            var defaultConnection = $"Data Source={RandomData.RandomWord()}";
            var transientDatabase = RandomData.RandomWord();

            _connectionStringManager = new ConnectionStringManager();
            _connectionStringManager.ConfigureTransientConnectionString(defaultConnection, transientDatabase);

            var database = new Database();

            database.ConfigureAndBuild(_connectionStringManager, new Dictionary <string, object>(), _session);

            database.RunScripts("../../../Common/Sql");
            _session.Received(2).Execute(Arg.Is(_connectionStringManager.TransientConnectionString),
                                         Arg.Any <string>());
        }
示例#12
0
        public void should_build()
        {
            IConnectionStringManager connectionStringManager = Substitute.For <IConnectionStringManager>();

            connectionStringManager.DefaultConnectionString.Returns("Server=localhost;database=a");
            connectionStringManager.TransientConnectionString.Returns("Server=localhost;database=b");
            IDatabase database = Substitute.For <IDatabase>();
            ISession  session  = Substitute.For <ISession>();

            var configuration = new ConfigurationBuilder().AddJsonFile("appsettings.con.json").Build();

            _builder.WithConfiguration(configuration, "AlternateConnection");
            _builder.ForVendor(connectionStringManager, database, session);
            var summary = _builder.ConfigurationSummary;

            Assert.DoesNotThrow(() => _builder.Build());
            Assert.AreEqual("Server=localhost;database=b", summary.TransientConnectionString);
        }
示例#13
0
        public void should_call_correct_drop_statements()
        {
            var defaultConnection = $"Server=localhost;Database={RandomData.RandomWord()}";
            var transientDatabase = RandomData.RandomWord();

            _connectionStringManager = new ConnectionStringManager();
            _connectionStringManager.ConfigureTransientConnectionString(defaultConnection, transientDatabase);

            var database = new Database();

            database.ConfigureAndBuild(_connectionStringManager, new Dictionary <string, object>(), _session);

            database.Drop();

            _session.Received(1).Execute(Arg.Is(_connectionStringManager.DefaultConnectionString),
                                         Arg.Is(
                                             $"select pid, pg_terminate_backend(pid) from pg_stat_activity where datname = '{_connectionStringManager.TransientDatabaseName}' and pid <> pg_backend_pid();"));
            _session.Received(1).Execute(Arg.Is(_connectionStringManager.DefaultConnectionString),
                                         Arg.Is($"drop database {_connectionStringManager.TransientDatabaseName}"));
        }
示例#14
0
 public SqliteContext(IConnectionStringManager connectionStringManager)
 {
     _connectionStringManager = connectionStringManager;
 }
示例#15
0
 /// <summary>
 /// Creates a new instance of SqlDataStoreBase which uses the specified ISqlDataConnectionProvider
 /// to obtain a connection to the database, and the specified IConnectionStringManager to obtain
 /// the actual connection string to use to establish that connection, by passing in the value of the
 /// base class ConnectionString property.
 /// </summary>
 /// <param name="provider">The ISqlDataConnectionProvider to use to establish a connection.</param>
 /// <param name="connectionStringManager">The IConnectionStringManager to use to convert the value from the ConnectionString property.</param>
 protected SqlDataStoreBase(ISqlDataConnectionProvider provider, IConnectionStringManager connectionStringManager)
     : base(provider, connectionStringManager)
 {
 }
示例#16
0
 public SQLiteSlickRunImporterService(ISlickRunExtractor extractor, ILogService log, IConnectionStringManager csm)
 {
     _log              = log;
     _extractor        = extractor;
     _connectionString = csm.Get();
 }
 public DataRepository(IConnectionStringManager connectionStringManager)
 {
     _connectionStringManager = connectionStringManager;
 }
示例#18
0
 protected EfCoreDbContextBase(IConnectionStringManager connectionManager)
 {
     _connectionManager = connectionManager;
 }
示例#19
0
 protected EfCoreDbContextBase(IConnectionStringManager connectionManager, DbContextOptions options)
     : base(options)
 {
     _connectionManager = connectionManager;
 }
示例#20
0
 /// <summary>
 /// Creates a new instance of EntityFrameworkDataStoreBase.
 /// </summary>
 /// <param name="provider"></param>
 /// <param name="connectionStringManager"></param>
 protected EntityFrameworkCoreDataStoreBase(IEntityFrameworkCoreDataConnectionProvider <TContext> provider, IConnectionStringManager connectionStringManager)
     : base(provider, connectionStringManager)
 {
 }
示例#21
0
 public void Setup()
 {
     _connectionStringManager = new ConnectionStringManager();
     _session = Substitute.For <ISession>();
 }
示例#22
0
 /// <summary>
 /// Creates a new DataStoreBase using the specified Connection Provider and Connection String Manager.
 /// </summary>
 /// <param name="provider">The provider to use to retrieve an instance of an IDataConnection / TConnection.</param>
 /// <param name="connectionStringManager">The connection string manager to use to convert the ConnectionString to an actual connection string.</param>
 protected DataStoreBase(IDataConnectionProvider <TConnection> provider, IConnectionStringManager connectionStringManager)
 {
     _provider = provider;
     _connectionStringManager = connectionStringManager;
 }
示例#23
0
 public ConnectionStringManagerTest(WebAppTestFactory factory)
 {
     connStringManager = factory.Services.GetService <IConnectionStringManager>();
     dbOptions         = factory.Services.GetService <IOptionsSnapshot <AppDbOptions> >().Value;
 }
 public SqlServerContext(IConnectionStringManager connectionStringManager)
 {
     _connectionStringManager = connectionStringManager;
 }
 public EntityFrameworkExampleDataStore(IEntityFrameworkCoreDataConnectionProvider <ExampleDbContext> provider,
                                        IConnectionStringManager connectionStringManager)
     : base(provider, connectionStringManager)
 {
 }
示例#26
0
 /// <summary>
 /// 构造函数
 /// <remarks>
 /// <para>此时数据库为SQLSERVER</para>
 /// </remarks>
 /// </summary>
 /// <param name="pConnectionStringManager">连接字符串管理器</param>
 public DBDataSource(IConnectionStringManager pConnectionStringManager)
 {
     this.ConnectionStringManager = pConnectionStringManager;
 }
示例#27
0
 public SqlConnectionFactory(IConnectionStringManager connectionStringManager)
 {
     _connectionStringManager = connectionStringManager;
 }
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            using (var scope = provider.CreateScope())
            {
                dbContext         = scope.ServiceProvider.GetRequiredService <ApplicationContext>();
                geoliteManager    = scope.ServiceProvider.GetRequiredService <IGeoliteManager>();
                hostEnvironment   = scope.ServiceProvider.GetRequiredService <IWebHostEnvironment>();
                connectionManager = scope.ServiceProvider.GetRequiredService <IConnectionStringManager>();



                // update every 7 days
                int updateIntervalInMilliseconds = TimeSpan.FromDays(7).Milliseconds;
                dbContext.Database.EnsureCreated();

                if (!dbContext.GeoObjects.Any())
                {
                    FillDatabase();

                    // install timer to UpdateDatabase every 7 days
                    timer = new Timer(async(obj) =>
                                      await UpdateDatabaseAsync(), null, updateIntervalInMilliseconds, updateIntervalInMilliseconds);
                }
                else
                {
                    GeoObject geoObject = await dbContext.GeoObjects.FirstOrDefaultAsync();

                    DateTime lastUpdateTime = geoObject.UpdateTime;
                    DateTime currentTime    = DateTime.UtcNow;
                    DateTime nextUpdateTime = CalculateNextUpdateTime(currentTime);
                    TimeSpan dayPassed      = currentTime - lastUpdateTime;
                    DateTime dateToUpdate   = nextUpdateTime - dayPassed;
                    TimeSpan daysLeft       = dateToUpdate - currentTime;


                    if (daysLeft.Days > 0)
                    {
                        // install timer to UpdateDatabase when left days will pass and set interval to repeat this action every 7 days
                        // so we update our DB every week (Wednesday)
                        timer = new Timer(async(obj) =>
                                          await UpdateDatabaseAsync(), null, daysLeft.Milliseconds, updateIntervalInMilliseconds);
                    }
                    else
                    {   // install timer to UpdateDatabase now and set interval to repeat this action every 7 days
                        // so we update our DB every week (Wednesday)
                        timer = new Timer(async(obj) =>
                                          await UpdateDatabaseAsync(), null, 0, updateIntervalInMilliseconds);
                    }
                }
            }


            DateTime CalculateNextUpdateTime(DateTime currentTime)
            => currentTime.DayOfWeek switch
            {
                DayOfWeek.Sunday => currentTime + TimeSpan.FromDays(3),
                DayOfWeek.Monday => currentTime + TimeSpan.FromDays(2),
                DayOfWeek.Tuesday => currentTime + TimeSpan.FromDays(1),
                DayOfWeek.Wednesday => currentTime,
                DayOfWeek.Thursday => currentTime + TimeSpan.FromDays(6),
                DayOfWeek.Friday => currentTime + TimeSpan.FromDays(5),
                DayOfWeek.Saturday => currentTime + TimeSpan.FromDays(4),
                _ => currentTime
            };

            // since we have no data in DB we should not call this method in async mode
            // because we first should migrate data to our DB and don't let any controller to be able to access DB before we
            // so this is why it's better to do it in sync
            // because we don't want our API work when DB is empty
            void FillDatabase()
            {
                var root      = hostEnvironment.ContentRootPath;
                var directory = Path.Combine(root, "Geolite");

                Directory.CreateDirectory(directory);

                string geoliteDb = geoliteManager.DownloadDbFileAsync(directory).Result;

                geoliteManager.MigrateToDbContext(geoliteDb, dbContext).Wait();
            }

            async Task UpdateDatabaseAsync()
            {
                var root      = hostEnvironment.ContentRootPath;
                var directory = Path.Combine(root, "Geolite");

                Directory.CreateDirectory(directory);

                string geoliteDb = await geoliteManager.DownloadDbFileAsync(directory);

                #region Migrate geoliteDb to new Database

                string newDatabaseConnection = connectionManager.GenerateNewConnectionString();

                var newDbConnectionBuilder = new DbContextOptionsBuilder <ApplicationContext>();
                newDbConnectionBuilder.UseNpgsql(newDatabaseConnection);

                using (var context = new ApplicationContext(newDbConnectionBuilder.Options))
                {
                    await context.Database.EnsureCreatedAsync();

                    await geoliteManager.MigrateToDbContext(geoliteDb, context);
                }

                #endregion


                // get currentDbConnection so that to delete
                // because we already created new DB
                string outdatedConnectionString = connectionManager.ConnectionString;

                // set CurrentConnectionString to our new DB
                connectionManager.ConnectionString = newDatabaseConnection;


                #region Delete outdated Database

                var outdatedDbBuilder = new DbContextOptionsBuilder <ApplicationContext>();
                outdatedDbBuilder.UseNpgsql(outdatedConnectionString);

                using (var outdatedContext = new ApplicationContext(outdatedDbBuilder.Options))
                {
                    await outdatedContext.Database.EnsureDeletedAsync();
                }

                #endregion
            }
        }
    }
示例#29
0
 public ConnectionStringSettings(IConnectionStringManager connectionStringManager)
 {
     _connectionStringManager = connectionStringManager;
 }
 public SqlConnectionFactory(IConnectionStringManager connectionStringManager)
 {
     // Validate parameters.
     _connectionStringManager = connectionStringManager ?? throw new ArgumentNullException(nameof(connectionStringManager));
 }