public async Task Should_reuse_name_in_sorted_order() { ConfigureModel = builder => builder.ConfigureTempTableEntity <CustomTempTable>(); var options = new TempTableCreationOptions { TableNameProvider = ReusingTempTableNameProvider.Instance, PrimaryKeyCreation = PrimaryKeyPropertiesProviders.None }; // #CustomTempTable_1 await using (await SUT.CreateTempTableAsync(ActDbContext.GetEntityType <CustomTempTable>(), options).ConfigureAwait(false)) { // #CustomTempTable_2 await using (await SUT.CreateTempTableAsync(ActDbContext.GetEntityType <CustomTempTable>(), options).ConfigureAwait(false)) { } } // #CustomTempTable_1 await using var tempTable = await SUT.CreateTempTableAsync(ActDbContext.GetEntityType <CustomTempTable>(), options).ConfigureAwait(false); var columns = AssertDbContext.GetTempTableColumns("#CustomTempTable_1").ToList(); columns.Should().HaveCount(2); ValidateColumn(columns[0], nameof(CustomTempTable.Column1), "int", false); ValidateColumn(columns[1], nameof(CustomTempTable.Column2), "nvarchar", true); }
public async Task Should_reuse_name_after_it_is_freed_although_previously_not_dropped() { ConfigureModel = builder => builder.ConfigureTempTableEntity <CustomTempTable>(); var options = new TempTableCreationOptions { TableNameProvider = ReusingTempTableNameProvider.Instance, PrimaryKeyCreation = PrimaryKeyPropertiesProviders.None, DropTableOnDispose = false }; // ReSharper disable once RedundantArgumentDefaultValue await using (await SUT.CreateTempTableAsync(ActDbContext.GetEntityType <CustomTempTable>(), options).ConfigureAwait(false)) { } options.TruncateTableIfExists = true; await using var tempTable = await SUT.CreateTempTableAsync(ActDbContext.GetEntityType <CustomTempTable>(), options).ConfigureAwait(false); var columns = AssertDbContext.GetTempTableColumns("#CustomTempTable_1").ToList(); columns.Should().HaveCount(2); ValidateColumn(columns[0], nameof(CustomTempTable.Column1), "int", false); ValidateColumn(columns[1], nameof(CustomTempTable.Column2), "nvarchar", true); AssertDbContext.GetTempTableColumns("#CustomTempTable_2").ToList() .Should().HaveCount(0); }
public CreateTempTableAsync(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { _sqlGenerationHelperMock = new Mock <ISqlGenerationHelper>(); _sqlGenerationHelperMock.Setup(h => h.DelimitIdentifier(It.IsAny <string>(), It.IsAny <string>())) .Returns <string, string>((name, schema) => schema == null ? $"\"{name}\"" : $"\"{schema}\".\"{name}\""); _sqlGenerationHelperMock.Setup(h => h.DelimitIdentifier(It.IsAny <string>())) .Returns <string>(name => $"\"{name}\""); _relationalTypeMappingSourceMock = new Mock <IRelationalTypeMappingSource>(); _optionsWithNonUniqueName = new TempTableCreationOptions { TableNameProvider = DefaultTempTableNameProvider.Instance, PrimaryKeyCreation = PrimaryKeyPropertiesProviders.None }; }
public async Task Should_create_temp_table_with_reusable_name() { ConfigureModel = builder => builder.ConfigureTempTableEntity <CustomTempTable>(); var options = new TempTableCreationOptions { TableNameProvider = ReusingTempTableNameProvider.Instance, PrimaryKeyCreation = PrimaryKeyPropertiesProviders.None }; // ReSharper disable once RedundantArgumentDefaultValue await using var tempTable = await SUT.CreateTempTableAsync(ActDbContext.GetEntityType <CustomTempTable>(), options).ConfigureAwait(false); var columns = AssertDbContext.GetTempTableColumns("#CustomTempTable_1").ToList(); columns.Should().HaveCount(2); ValidateColumn(columns[0], nameof(CustomTempTable.Column1), "int", false); ValidateColumn(columns[1], nameof(CustomTempTable.Column2), "nvarchar", true); }
public async Task Should_not_reuse_name_before_it_is_freed() { ConfigureModel = builder => builder.ConfigureTempTableEntity <CustomTempTable>(); var options = new TempTableCreationOptions { TableNameProvider = ReusingTempTableNameProvider.Instance }; // ReSharper disable once RedundantArgumentDefaultValue await using (await SUT.CreateTempTableAsync(ActDbContext.GetEntityType <CustomTempTable>(), options).ConfigureAwait(false)) { await SUT.CreateTempTableAsync(ActDbContext.GetEntityType <CustomTempTable>(), options).ConfigureAwait(false); } var columns = AssertDbContext.GetTempTableColumns("#CustomTempTable_2").ToList(); columns.Should().HaveCount(2); ValidateColumn(columns[0], nameof(CustomTempTable.Column1), "INTEGER", false); ValidateColumn(columns[1], nameof(CustomTempTable.Column2), "TEXT", true); }
public static Task <string> CreateTempTableAsync([NotNull] this DbContext ctx, [NotNull] Type type, [NotNull] TempTableCreationOptions options, CancellationToken cancellationToken) { var entityType = ctx.Model.GetEntityType(type); return(ctx.GetService <ITempTableCreator>().CreateTempTableAsync(ctx, entityType, options, cancellationToken)); }