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... } } }
public SqlLocalDb() { _localDb = new SqlLocalDbApi(); _instance = _localDb.GetOrCreateInstance("SSS-LoadTests"); _manager = _instance.Manage(); Initialize().Wait(); }
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"); }
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); }
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); }
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); }); }