示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
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
            };
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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));
        }