Ejemplo n.º 1
0
        public void Should_be_able_to_fetch_whole_entity()
        {
            ArrangeDbContext.TestEntities.Add(new TestEntity {
                Id = new Guid("4883F7E0-FC8C-45FF-A579-DF351A3E79BF"), Name = "1"
            });
            ArrangeDbContext.SaveChanges();

            var query = ActDbContext.TestEntities
                        .Select(e => new
            {
                e,
                RowNumber = EF.Functions.RowNumber(EF.Functions.OrderBy(e.Name))
            });

            var entities = query.ToList();

            entities.Should().HaveCount(1);
            entities[0].Should().BeEquivalentTo(new
            {
                e = new TestEntity
                {
                    Id   = new Guid("4883F7E0-FC8C-45FF-A579-DF351A3E79BF"),
                    Name = "1"
                },
                RowNumber = 1
            });
        }
Ejemplo n.º 2
0
        public void Generates_RowNumber_with_orderby_and_two_columns()
        {
            ArrangeDbContext.TestEntities.Add(new TestEntity {
                Id = new Guid("4883F7E0-FC8C-45FF-A579-DF351A3E79BF"), Name = "1", Count = 1
            });
            ArrangeDbContext.TestEntities.Add(new TestEntity {
                Id = new Guid("18C13F68-0981-4853-92FC-FB7B2551F70A"), Name = "1", Count = 2
            });
            ArrangeDbContext.SaveChanges();

            var result = ActDbContext.TestEntities
                         .Select(e => new
            {
                e.Count,
                RowNumber = EF.Functions.RowNumber(new
                {
                    e.Name,
                    e.Count
                })
            })
                         .ToList();

            result.First(t => t.Count == 1).RowNumber.Should().Be(1);
            result.First(t => t.Count == 2).RowNumber.Should().Be(2);
        }
Ejemplo n.º 3
0
        public async Task Should_insert_entityType_without_touching_real_table()
        {
            var entity = new TestEntity
            {
                Id               = new Guid("577BFD36-21BC-4F9E-97B4-367B8F29B730"),
                Name             = "Name",
                Count            = 42,
                ConvertibleClass = new ConvertibleClass(43)
            };

            ArrangeDbContext.TestEntities.Add(entity);
            await ArrangeDbContext.SaveChangesAsync();

            var entities = new List <TestEntity> {
                entity
            };

            await using var query = await ActDbContext.BulkInsertIntoTempTableAsync(entities);

            var tempTable = await query.Query.ToListAsync();

            tempTable.Should()
            .HaveCount(1).And
            .BeEquivalentTo(new TestEntity
            {
                Id               = new Guid("577BFD36-21BC-4F9E-97B4-367B8F29B730"),
                Name             = "Name",
                Count            = 42,
                ConvertibleClass = new ConvertibleClass(43)
            });
        }
Ejemplo n.º 4
0
        public async Task Should_not_create_pk_if_specified_in_options()
        {
            ConfigureModel = builder => builder.ConfigureTempTable <int>();

            await using var tempTable = await ActDbContext.BulkInsertValuesIntoTempTableAsync(new List <int> { 1 }, new SqlServerTempTableBulkInsertOptions { PrimaryKeyCreation = PrimaryKeyPropertiesProviders.None });

            var keys = ArrangeDbContext.GetTempTableKeyColumns <TempTable <int> >().ToList();

            keys.Should().HaveCount(0);
        }
        public async Task Should_not_create_primary_key_if_key_exists_and_checkForExistence_is_true()
        {
            var tableName = await ArrangeDbContext.CreateTempTableAsync <TestEntity>();

            var entityType = ArrangeDbContext.GetEntityType <TestEntity>();
            await _sut.CreatePrimaryKeyAsync(ArrangeDbContext, entityType, tableName);

            _sut.Awaiting(async sut => await sut.CreatePrimaryKeyAsync(ActDbContext, entityType, tableName, true))
            .Should().NotThrow();
        }
        public async Task Should_throw_if_key_exists_and_checkForExistence_is_false()
        {
            var tableName = await ArrangeDbContext.CreateTempTableAsync <TestEntity>();

            var entityType = ArrangeDbContext.GetEntityType <TestEntity>();
            await _sut.CreatePrimaryKeyAsync(ArrangeDbContext, entityType, tableName);

            // ReSharper disable once RedundantArgumentDefaultValue
            _sut.Awaiting(async sut => await sut.CreatePrimaryKeyAsync(ActDbContext, entityType, tableName, false))
            .Should()
            .Throw <SqlException>();
        }
Ejemplo n.º 7
0
        public async Task Should_create_pk_by_default()
        {
            ConfigureModel = builder => builder.ConfigureTempTable <int>();

            await ActDbContext.BulkInsertValuesIntoTempTableAsync(new List <int> {
                1
            }).ConfigureAwait(false);

            var keys = ArrangeDbContext.GetTempTableKeyColumns <TempTable <int> >().ToList();

            keys.Should().HaveCount(1);
            keys[0].COLUMN_NAME.Should().Be(nameof(TempTable <int> .Column1));
        }
Ejemplo n.º 8
0
        public async Task Should_not_create_pk_if_entity_is_keyless_and_provider_is_AccordingToEntityTypeConfiguration()
        {
            ConfigureModel = builder => builder.ConfigureTempTable <int>();

            await using var tempTable = await ActDbContext.BulkInsertValuesIntoTempTableAsync(new List <int> { 1 }, new SqlServerTempTableBulkInsertOptions
            {
                TableNameProvider  = DefaultTempTableNameProvider.Instance,
                PrimaryKeyCreation = PrimaryKeyPropertiesProviders.EntityTypeConfiguration
            });

            var keys = ArrangeDbContext.GetTempTableKeyColumns <TempTable <int> >().ToList();

            keys.Should().HaveCount(0);
        }
Ejemplo n.º 9
0
        public async Task Should_create_pk_by_default()
        {
            ConfigureModel = builder => builder.ConfigureTempTable <int>();

            await using var tempTable = await ActDbContext.BulkInsertValuesIntoTempTableAsync(new List <int> { 1 }, new SqlServerTempTableBulkInsertOptions
            {
                TableNameProvider  = DefaultTempTableNameProvider.Instance,
                PrimaryKeyCreation = PrimaryKeyPropertiesProviders.AdaptiveForced
            });

            var keys = ArrangeDbContext.GetTempTableKeyColumns <TempTable <int> >().ToList();

            keys.Should().HaveCount(1);
            keys[0].COLUMN_NAME.Should().Be(nameof(TempTable <int> .Column1));
        }
        public async Task Should_create_primary_key_for_entityType()
        {
            var tableName = await ArrangeDbContext.CreateTempTableAsync <TestEntity>();

            await _sut.CreatePrimaryKeyAsync(ActDbContext, ActDbContext.GetEntityType <TestEntity>(), tableName);

            var constraints = await AssertDbContext.GetTempTableConstraints <TestEntity>().ToListAsync();

            constraints.Should().HaveCount(1)
            .And.Subject.First().CONSTRAINT_TYPE.Should().Be("PRIMARY KEY");

            var keyColumns = await AssertDbContext.GetTempTableKeyColumns <TestEntity>().ToListAsync();

            keyColumns.Should().HaveCount(1)
            .And.Subject.First().COLUMN_NAME.Should().Be(nameof(TestEntity.Id));
        }
Ejemplo n.º 11
0
        public async Task Should_not_create_primary_key_if_key_exists_and_checkForExistence_is_true()
        {
#pragma warning disable 618
            await using var tempTableReference = await ArrangeDbContext.CreateTempTableAsync <TestEntity>(new TempTableCreationOptions
            {
                TableNameProvider  = NewGuidTempTableNameProvider.Instance,
                PrimaryKeyCreation = PrimaryKeyPropertiesProviders.None
            });

#pragma warning restore 618
            var entityType    = ArrangeDbContext.GetEntityType <TestEntity>();
            var keyProperties = PrimaryKeyPropertiesProviders.AdaptiveForced.GetPrimaryKeyProperties(entityType, entityType.GetProperties().ToList());
            await SUT.CreatePrimaryKeyAsync(ArrangeDbContext, keyProperties, tempTableReference.Name);

            SUT.Awaiting(sut => sut.CreatePrimaryKeyAsync(ActDbContext, keyProperties, tempTableReference.Name, true))
            .Should().NotThrow();
        }
Ejemplo n.º 12
0
        public async Task Should_throw_if_key_exists_and_checkForExistence_is_false()
        {
#pragma warning disable 618
            await using var tempTableReference = await ArrangeDbContext.CreateTempTableAsync <TestEntity>(new TempTableCreationOptions
            {
                TableNameProvider  = NewGuidTempTableNameProvider.Instance,
                PrimaryKeyCreation = PrimaryKeyPropertiesProviders.None
            });

            var entityType    = ArrangeDbContext.GetEntityType <TestEntity>();
            var keyProperties = PrimaryKeyPropertiesProviders.AdaptiveForced.GetPrimaryKeyProperties(entityType, entityType.GetProperties().ToList());
            await SUT.CreatePrimaryKeyAsync(ArrangeDbContext, keyProperties, tempTableReference.Name);

            // ReSharper disable once RedundantArgumentDefaultValue
            SUT.Awaiting(sut => sut.CreatePrimaryKeyAsync(ActDbContext, keyProperties, tempTableReference.Name, false))
            .Should()
            .Throw <SqlException>();
        }
Ejemplo n.º 13
0
        public void Generates_RowNumber_with_orderby_and_one_column_generic_approach()
        {
            ArrangeDbContext.TestEntities.Add(new TestEntity {
                Id = new Guid("4883F7E0-FC8C-45FF-A579-DF351A3E79BF"), Name = "1"
            });
            ArrangeDbContext.TestEntities.Add(new TestEntity {
                Id = new Guid("18C13F68-0981-4853-92FC-FB7B2551F70A"), Name = "2"
            });
            ArrangeDbContext.SaveChanges();

            var propertyName = nameof(TestEntity.Name);

            var query  = ActDbContext.TestEntities;
            var result = AppendSelect(query, propertyName, new { Name = String.Empty, RowNumber = 0L }).ToList();

            result.First(t => t.Name == "1").RowNumber.Should().Be(1);
            result.First(t => t.Name == "2").RowNumber.Should().Be(2);
        }
Ejemplo n.º 14
0
        public void Should_throw_if_accessing_RowNumber_not_within_subquery()
        {
            ArrangeDbContext.TestEntities.Add(new TestEntity {
                Id = new Guid("4883F7E0-FC8C-45FF-A579-DF351A3E79BF"), Name = "1"
            });
            ArrangeDbContext.SaveChanges();

            var query = ActDbContext.TestEntities
                        .Select(e => new
            {
                e.Name,
                RowNumber = EF.Functions.RowNumber(EF.Functions.OrderBy(e.Name))
            })
                        .Where(i => i.RowNumber == 1);

            query.Invoking(q => q.ToList())
            .Should()
            .Throw <SqliteException>();
        }
Ejemplo n.º 15
0
        public void Generates_RowNumber_with_orderby_and_one_struct_column()
        {
            ArrangeDbContext.TestEntities.Add(new TestEntity {
                Id = new Guid("18CF65B3-F53D-4F45-8DF5-DD62DCC8B2EB")
            });
            ArrangeDbContext.TestEntities.Add(new TestEntity {
                Id = new Guid("28CF65B3-F53D-4F45-8DF5-DD62DCC8B2EB")
            });
            ArrangeDbContext.SaveChanges();

            var result = ActDbContext.TestEntities
                         .Select(e => new
            {
                e.Id,
                RowNumber = EF.Functions.RowNumber(e.Id)
            })
                         .ToList();

            result.First(t => t.Id == new Guid("18CF65B3-F53D-4F45-8DF5-DD62DCC8B2EB")).RowNumber.Should().Be(1);
            result.First(t => t.Id == new Guid("28CF65B3-F53D-4F45-8DF5-DD62DCC8B2EB")).RowNumber.Should().Be(2);
        }
Ejemplo n.º 16
0
        public void Generates_RowNumber_with_orderby_desc_and_one_column()
        {
            ArrangeDbContext.TestEntities.Add(new TestEntity {
                Id = new Guid("4883F7E0-FC8C-45FF-A579-DF351A3E79BF"), Name = "1"
            });
            ArrangeDbContext.TestEntities.Add(new TestEntity {
                Id = new Guid("18C13F68-0981-4853-92FC-FB7B2551F70A"), Name = "2"
            });
            ArrangeDbContext.SaveChanges();

            var result = ActDbContext.TestEntities
                         .Select(e => new
            {
                e.Name,
                RowNumber = EF.Functions.RowNumber(EF.Functions.Descending(e.Name))
            })
                         .ToList();

            result.First(t => t.Name == "1").RowNumber.Should().Be(2);
            result.First(t => t.Name == "2").RowNumber.Should().Be(1);
        }
Ejemplo n.º 17
0
        public void Throws_if_RowNumber_contains_NewExpression()
        {
            ArrangeDbContext.TestEntities.Add(new TestEntity {
                Id = new Guid("4883F7E0-FC8C-45FF-A579-DF351A3E79BF"), Name = "1", Count = 1
            });
            ArrangeDbContext.TestEntities.Add(new TestEntity {
                Id = new Guid("18C13F68-0981-4853-92FC-FB7B2551F70A"), Name = "1", Count = 2
            });
            ArrangeDbContext.SaveChanges();

            var query = ActDbContext.TestEntities
                        .Select(e => new
            {
                e.Count,
                RowNumber = EF.Functions.RowNumber(new { e.Name, e.Count },
                                                   EF.Functions.OrderBy(e.Name).ThenBy(e.Count))
            });

            query.Invoking(q => q.ToList()).Should().Throw <NotSupportedException>()
            .WithMessage("The EF function 'RowNumber' contains some expressions not supported by the Entity Framework. One of the reason is the creation of new objects like: 'new { e.MyProperty, e.MyOtherProperty }'.");
        }
Ejemplo n.º 18
0
        public void Should_filter_for_RowNumber_if_accessing_within_subquery()
        {
            ArrangeDbContext.TestEntities.Add(new TestEntity {
                Id = new Guid("4883F7E0-FC8C-45FF-A579-DF351A3E79BF"), Name = "1"
            });
            ArrangeDbContext.TestEntities.Add(new TestEntity {
                Id = new Guid("18C13F68-0981-4853-92FC-FB7B2551F70A"), Name = "2"
            });
            ArrangeDbContext.SaveChanges();

            var result = ActDbContext.TestEntities
                         .Select(e => new
            {
                e.Name,
                RowNumber = EF.Functions.RowNumber(EF.Functions.OrderBy(e.Name))
            })
                         .AsSubQuery()
                         .Where(i => i.RowNumber == 1)
                         .ToList();

            result.Should().HaveCount(1);
            result[0].Name.Should().Be("1");
        }
Ejemplo n.º 19
0
 public Create(ITestOutputHelper testOutputHelper)
     : base(testOutputHelper)
 {
     _column2Property = ArrangeDbContext.GetEntityType <TestEntity>().GetProperty(nameof(TestEntity.Column2));
 }