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 }); }
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); }
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) }); }
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>(); }
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)); }
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); }
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)); }
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(); }
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>(); }
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); }
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>(); }
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); }
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); }
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 }'."); }
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"); }
public Create(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { _column2Property = ArrangeDbContext.GetEntityType <TestEntity>().GetProperty(nameof(TestEntity.Column2)); }