/// <summary> /// Adds SQL Server LocalDB services. /// </summary> /// <param name="services">The <see cref="IServiceCollection"/> to add services to.</param> /// <param name="configure">A delegate to a method to use to configure the SQL Server LocalDB options.</param> /// <returns> /// The <see cref="IServiceCollection"/> passed as the value of <paramref name="services"/>. /// </returns> /// <exception cref="ArgumentNullException"> /// <paramref name="services"/> or <paramref name="configure"/> is <see langword="null"/>. /// </exception> public static IServiceCollection AddSqlLocalDB(this IServiceCollection services, Action <SqlLocalDbOptions> configure) { if (services == null) { throw new ArgumentNullException(nameof(services)); } if (configure == null) { throw new ArgumentNullException(nameof(configure)); } return(services.AddSqlLocalDB( (_) => { var options = new SqlLocalDbOptions(); configure(options); return options; })); }
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); }); }
/// <summary> /// Adds SQL Server LocalDB services. /// </summary> /// <param name="services">The <see cref="IServiceCollection"/> to add services to.</param> /// <param name="options">The SQL Server LocalDB options to use.</param> /// <returns> /// The <see cref="IServiceCollection"/> passed as the value of <paramref name="services"/>. /// </returns> /// <exception cref="ArgumentNullException"> /// <paramref name="services"/> or <paramref name="options"/> is <see langword="null"/>. /// </exception> public static IServiceCollection AddSqlLocalDB(this IServiceCollection services, SqlLocalDbOptions options) { if (services == null) { throw new ArgumentNullException(nameof(services)); } if (options == null) { throw new ArgumentNullException(nameof(options)); } return(services.AddSqlLocalDB((_) => options)); }
public async Task Can_Create_Update_And_Delete_Todo_Items() { // Arrange Skip.IfNot( RuntimeInformation.IsOSPlatform(OSPlatform.Windows), "This test can only be run on Windows."); var now = new DateTimeOffset(2018, 08, 12, 10, 41, 0, TimeSpan.Zero); var clock = new FakeClock(Instant.FromDateTimeOffset(now)); var options = new SqlLocalDbOptions() { AutomaticallyDeleteInstanceFiles = true, StopOptions = StopInstanceOptions.NoWait, StopTimeout = TimeSpan.FromSeconds(1), }; using var localDB = new SqlLocalDbApi(options, LoggerFactory); using TemporarySqlLocalDbInstance instance = localDB.CreateTemporaryInstance(deleteFiles: true); var builder = new DbContextOptionsBuilder <TodoContext>() .UseSqlServer(instance.ConnectionString); using var context = new TodoContext(builder.Options); await context.Database.MigrateAsync(); var target = new TodoRepository(clock, context); // Act - Verify the repository is empty IList <TodoItem> items = await target.GetItemsAsync(); // Assert Assert.NotNull(items); Assert.Empty(items); // Arrange - Add a new item string text = "Buy cheese"; // Act TodoItem item = await target.AddItemAsync(text); // Assert Assert.NotNull(item); Assert.NotEqual(Guid.Empty, item.Id); Assert.Equal(text, item.Text); Assert.Equal(now, item.CreatedAt); Assert.Null(item.CompletedAt); // Arrange - Mark the item as completed Guid id = item.Id; // Act bool?completeResult = await target.CompleteItemAsync(id); // Assert Assert.True(completeResult); // Act - Verify the repository has one item that is completed items = await target.GetItemsAsync(); // Assert Assert.NotNull(items); Assert.NotEmpty(items); Assert.Equal(1, items.Count); item = items[0]; Assert.NotNull(item); Assert.NotEqual(Guid.Empty, item.Id); Assert.Equal(text, item.Text); Assert.Equal(now, item.CreatedAt); Assert.Equal(now, item.CompletedAt); // Act - Delete the item bool deleteResult = await target.DeleteItemAsync(id); // Assert Assert.True(deleteResult); // Act - Verify the repository is empty again items = await target.GetItemsAsync(); // Assert Assert.NotNull(items); Assert.Empty(items); }