public SqlServerDbProvider(IServiceProvider sp, DbServerOptions dbServerOptions)
        {
            var dbContextOptionsBuilder = new DbContextOptionsBuilder();

            dbContextOptionsBuilder.EnableDetailedErrors(dbServerOptions.EnableDetailedErrors);
            dbContextOptionsBuilder.EnableSensitiveDataLogging(dbServerOptions.EnableSensitiveDataLogging);
            dbContextOptionsBuilder.UseSqlServer(
                dbServerOptions.ConnectionString, c =>
            {
                c.EnableRetryOnFailure();

                if (dbServerOptions.MaxBatchSize > 0)
                {
                    c.MaxBatchSize(dbServerOptions.MaxBatchSize);
                }

                c.MigrationsAssembly(dbServerOptions.MigrationAssemblyName);
            });

            _sqlContext = (DbContext)ActivatorUtilities
                          .CreateInstance(sp,
                                          Type.GetType(dbServerOptions.DbContextType) ?? throw new InvalidOperationException(), dbContextOptionsBuilder.Options);

            //_sqlContext.Database.EnsureCreated();
            _sqlContext.Database.Migrate();
        }
Exemple #2
0
        public async Task TestConnectionStringWithoutKeyVaultAndProtocol()
        {
            var keyVaultReaderMock = new Mock <IKeyVaultReader>();

            keyVaultReaderMock.Setup(framework => framework.IsAvailable).Returns(false);

            var dbServerOptions = new DbServerOptions
            {
                Server     = "s",
                Database   = "d",
                DbPassword = "******"
            };
            var optionsMock = new Mock <IOptions <DbServerOptions> >();

            optionsMock.Setup(framework => framework.Value).Returns(dbServerOptions);

            var da = new DataAccess(keyVaultReaderMock.Object, optionsMock.Object);

            Assert.AreEqual("Data Source=s;Initial Catalog=d;User ID=demo;Password=p", await da.GetConnectionString());
        }
Exemple #3
0
        public async Task TestConnectionStringWithKeyVaultAndProtocol()
        {
            var keyVaultReaderMock = new Mock <IKeyVaultReader>();

            keyVaultReaderMock.Setup(framework => framework.IsAvailable).Returns(true);
            keyVaultReaderMock.Setup(framework => framework.GetSecretAsync(It.IsAny <string>())).Returns(Task.FromResult("p"));

            var dbServerOptions = new DbServerOptions
            {
                Server   = "s",
                Database = "d",
                Protocol = "tcp"
            };
            var optionsMock = new Mock <IOptions <DbServerOptions> >();

            optionsMock.Setup(framework => framework.Value).Returns(dbServerOptions);

            var da = new DataAccess(keyVaultReaderMock.Object, optionsMock.Object);

            Assert.AreEqual("Data Source=tcp:s,1433;Initial Catalog=d;User ID=demo;Password=p", await da.GetConnectionString());
        }