public void Use_With_Dependency_Injection()
        {
            // Register with SQL LocalDB services
            var services = new ServiceCollection()
                           .AddLogging((builder) => builder.AddXUnit(OutputHelper))
                           .AddSqlLocalDB();

            IServiceProvider serviceProvider = services.BuildServiceProvider();

            using (IServiceScope scope = serviceProvider.CreateScope())
            {
                ISqlLocalDbApi             localDB  = scope.ServiceProvider.GetService <ISqlLocalDbApi>();
                ISqlLocalDbInstanceInfo    instance = localDB.GetDefaultInstance();
                ISqlLocalDbInstanceManager manager  = instance.Manage();

                if (!instance.IsRunning)
                {
                    manager.Start();
                }

                using (SqlConnection connection = instance.CreateConnection())
                {
                    connection.Open();

                    // Use the SQL connection...
                }
            }
        }
Beispiel #2
0
 public SqlLocalDb()
 {
     _localDb  = new SqlLocalDbApi();
     _instance = _localDb.GetOrCreateInstance("SSS-LoadTests");
     _manager  = _instance.Manage();
     Initialize().Wait();
 }
Beispiel #3
0
        private static void AddTodoContext(IServiceProvider serviceProvider, DbContextOptionsBuilder options)
        {
            // Check that SQL Server LocalDB is installed
            ISqlLocalDbApi localDB = serviceProvider.GetRequiredService <ISqlLocalDbApi>();

            if (!localDB.IsLocalDBInstalled())
            {
                throw new NotSupportedException("SQL LocalDB is not installed.");
            }

            // Get the configured SQL LocalDB instance to store the TODO items in, creating it if it does not exist
            IConfiguration          config   = serviceProvider.GetRequiredService <IConfiguration>();
            ISqlLocalDbInstanceInfo instance = localDB.GetOrCreateInstance(config["SqlLocalDbInstance"]);

            // Ensure that the SQL LocalDB instance is running and start it if not already running
            if (!instance.IsRunning)
            {
                instance.Manage().Start();
            }

            // Get the SQL connection string to use to connect to the LocalDB instance
            string connectionString = instance.GetConnectionString();

            options.UseSqlServer(connectionString);
        }
        public static void Manage_Throws_If_Instance_Is_Null()
        {
            // Arrange
            ISqlLocalDbInstanceInfo instance = null;

            // Act and Assert
            Assert.Throws <ArgumentNullException>("instance", () => instance.Manage());
        }
        public DacpacDbFixture()
        {
            Console.WriteLine("Running fixture constructor...");

            _localDb = new SqlLocalDbApi();
            DateTime nowUtc = DateTime.UtcNow;

            LocalDbInstanceName = $"{nowUtc.ToString("yyyyMMddHHmmssFFFFFFF")}";    //something mostly unique
            _instance           = _localDb.GetOrCreateInstance(LocalDbInstanceName);
            _manager            = _instance.Manage();

            if (!_instance.IsRunning)
            {
                _manager.Start();
            }

            var packagePath = "SimpleDb.dacpac";

            var deployOptions = new DacDeployOptions
            {
                CreateNewDatabase     = true,
                GenerateSmartDefaults = true,
            };

            deployOptions.SqlCommandVariableValues["LoginName"] = DatabaseUserName;
            deployOptions.SqlCommandVariableValues["Password"]  = DatabasePassword;

            SqlConnectionStringBuilder csb = new SqlConnectionStringBuilder();

            csb.DataSource         = _manager.NamedPipe;
            csb.IntegratedSecurity = true;
            var databaseName          = "SimpleDbUnitTest";
            var debugConnectionString = csb.ConnectionString;
            var dacServices           = new DacServices(debugConnectionString);

            using (var package = DacPackage.Load(packagePath))
            {
                dacServices.Deploy(package, databaseName, true, deployOptions);
            }
            csb.InitialCatalog = databaseName;
            //csb.UserID = DatabaseUserName;
            //csb.Password = DatabasePassword;
            //csb.IntegratedSecurity = false;
            ConnectionString = csb.ConnectionString;

            EntityConnectionStringBuilder ecsb = new EntityConnectionStringBuilder();
            string nameOfConnectionString      = "SimpleDbModel";         //NOTE: HACK: this must match the name of my Entity Framework model (the .edmx guy)
            string providerName = "System.Data.SqlClient";

            ecsb.Provider = providerName;
            ecsb.ProviderConnectionString = csb.ConnectionString;
            ecsb.Metadata      = $"res://*/{nameOfConnectionString}.csdl|res://*/{nameOfConnectionString}.ssdl|res://*/{nameOfConnectionString}.msl";
            EfConnectionString = ecsb.ConnectionString;

            NumberOfTimesDacpacWasApplied++;
            Debug.WriteLine($">> The DACPAC has been applied {NumberOfTimesDacpacWasApplied} times");
            Console.WriteLine($">> The DACPAC has been applied {NumberOfTimesDacpacWasApplied} times");
        }
Beispiel #6
0
        public static string GetRunningConnectionString(ISqlLocalDbInstanceInfo db)
        {
            if (!db.IsRunning)
            {
                db.Manage().Start();
            }

            return(db.GetConnectionString());
        }
 public DatabaseFixture()
 {
     this.localDB = new SqlLocalDbApi();
     instance     = localDB.GetOrCreateInstance(DatabaseFixture.LOCALDB_NAME);
     manager      = instance.Manage();
     if (!instance.IsRunning)
     {
         manager.Start();
     }
     RestoreBackup().GetAwaiter().GetResult();
 }
        public static IServiceCollection AddSqlLocalDbInstance(this IServiceCollection services, Action <TOptions> setupAction = null)
        {
            if (setupAction != null)
            {
                services.Configure(setupAction);
            }

            services.AddSingleton <ISqlLocalDbInstanceInfo>(provider =>
            {
                var options = provider.GetService <IOptions <TOptions> >() ?? new OptionsWrapper <TOptions>(provider.GetRequiredService <TOptions>());

                ISqlLocalDbApi localDB = provider.GetRequiredService <ISqlLocalDbApi>();

                if (!localDB.IsLocalDBInstalled())
                {
                    throw new NotSupportedException("SQL LocalDB is not installed.");
                }

                // Get the configured SQL LocalDB instance to store the TODO items in, creating it if it does not exist

                ISqlLocalDbInstanceInfo instance = localDB.GetOrCreateInstance(options?.Value?.InstanceName ?? "SqlLocalDb-DefaultDb");

                // Ensure that the SQL LocalDB instance is running and start it if not already running
                if (!instance.IsRunning)
                {
                    instance.Manage().Start();
                }

                // Get the SQL connection string to use to connect to the LocalDB instance
                //string connectionString = instance.GetConnectionString();
                return(instance);
            });

            services.AddSingleton <Server>(provider =>
            {
                var options = provider.GetService <IOptions <TOptions> >() ?? new OptionsWrapper <TOptions>(provider.GetRequiredService <TOptions>());

                var instance      = provider.GetRequiredService <ISqlLocalDbInstanceInfo>();
                string connString = instance.GetConnectionString();
                //var conn = new SqlConnection(connString);
                var builder            = instance.CreateConnectionStringBuilder();
                builder.InitialCatalog = options?.Value.DatabaseName ?? "";
                var conn = new SqlConnection(builder.ConnectionString);

                var server = new Server(new ServerConnection(conn));
                return(server);
            });


            return(services);
        }
Beispiel #9
0
        private static string InitSqlLocalDB()
        {
            ISqlLocalDbApi          localDB  = new SqlLocalDbApi();
            ISqlLocalDbInstanceInfo instance = localDB.GetOrCreateInstance(@"localtestdb");

            ISqlLocalDbInstanceManager manager = instance.Manage();

            if (!instance.IsRunning)
            {
                manager.Start();
            }

            return(instance.GetConnectionString());
        }
        public void Create_A_Sql_LocalDB_Instance()
        {
            using (var localDB = new SqlLocalDbApi(OutputHelper.ToLoggerFactory()))
            {
                ISqlLocalDbInstanceInfo    instance = localDB.GetOrCreateInstance("MyInstance");
                ISqlLocalDbInstanceManager manager  = instance.Manage();

                if (!instance.IsRunning)
                {
                    manager.Start();
                }

                using (SqlConnection connection = instance.CreateConnection())
                {
                    connection.Open();

                    // Use the SQL connection...
                }

                manager.Stop();
            }
        }
        public static void Manage_Returns_An_ISqlLocalDbInstanceManager()
        {
            // Arrange
            var api  = Mock.Of <ISqlLocalDbApi>();
            var mock = new Mock <ISqlLocalDbInstanceInfo>();

            mock.As <ISqlLocalDbApiAdapter>()
            .Setup((p) => p.LocalDb).Returns(api);

            ISqlLocalDbInstanceInfo instance = mock.Object;

            // Act
            ISqlLocalDbInstanceManager actual = instance.Manage();

            // Assert
            actual.ShouldNotBeNull();

            var adapter = actual as ISqlLocalDbApiAdapter;

            adapter.ShouldNotBeNull();
            adapter.LocalDb.ShouldBeSameAs(api);
        }
Beispiel #12
0
        public static void RegisterAndPopulateLocalDatabase(this IServiceCollection services)
        {
            var options = new SqlLocalDbOptions()
            {
                AutomaticallyDeleteInstanceFiles = true,
                StopOptions = StopInstanceOptions.NoWait,
                StopTimeout = TimeSpan.FromDays(1),
            };

            services.AddSingleton(sp => new SqlLocalDbApi(options, sp.GetRequiredService <ILoggerFactory>()));
            services.AddSingleton(sp =>
            {
                ISqlLocalDbInstanceInfo instance = sp.GetRequiredService <SqlLocalDbApi>().GetOrCreateInstance("ProductSuggestions");

                if (!instance.IsRunning)
                {
                    ISqlLocalDbInstanceManager manager = instance.Manage();
                    manager.Start();
                }

                sp.GetRequiredService <ILogger <ISqlLocalDbInstanceInfo> >().LogInformation($"\nConnectionString:\n{instance.GetConnectionString()}");

                var upgrader = DeployChanges.To
                               .SqlDatabase(instance.GetConnectionString())
                               .WithScriptsEmbeddedInAssembly(Assembly.GetExecutingAssembly())
                               .LogToConsole()
                               .Build();

                var result = upgrader.PerformUpgrade();

                if (!result.Successful)
                {
                    throw result.Error;
                }

                return(instance);
            });
        }