Skip to content

Commit

Permalink
Merge pull request #27944 from dotnet-maestro-bot/merge/release/6.0-t…
Browse files Browse the repository at this point in the history
…o-main

[automated] Merge branch 'release/6.0' => 'main'
  • Loading branch information
msftbot[bot] committed May 11, 2022
2 parents 01c2651 + b4f8800 commit 7dfd66c
Show file tree
Hide file tree
Showing 3 changed files with 155 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Licensed to the .NET Foundation under one or more agreements.
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.Text;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,82 @@ public static ModelBuilderTest.TestOwnedNavigationBuilder<TOwnerEntity, TRelated
return builder;
}

public static ModelBuilderTest.TestEntityTypeBuilder<TEntity> ToView<TEntity>(
this ModelBuilderTest.TestEntityTypeBuilder<TEntity> builder,
string? schema)
where TEntity : class
{
switch (builder)
{
case IInfrastructure<EntityTypeBuilder<TEntity>> genericBuilder:
genericBuilder.Instance.ToView(schema);
break;
case IInfrastructure<EntityTypeBuilder> nongenericBuilder:
nongenericBuilder.Instance.ToView(schema);
break;
}

return builder;
}

public static ModelBuilderTest.TestEntityTypeBuilder<TEntity> ToView<TEntity>(
this ModelBuilderTest.TestEntityTypeBuilder<TEntity> builder,
string? name,
string? schema)
where TEntity : class
{
switch (builder)
{
case IInfrastructure<EntityTypeBuilder<TEntity>> genericBuilder:
genericBuilder.Instance.ToView(name, schema);
break;
case IInfrastructure<EntityTypeBuilder> nongenericBuilder:
nongenericBuilder.Instance.ToView(name, schema);
break;
}

return builder;
}

public static ModelBuilderTest.TestOwnedNavigationBuilder<TOwnerEntity, TRelatedEntity> ToView<TOwnerEntity, TRelatedEntity>(
this ModelBuilderTest.TestOwnedNavigationBuilder<TOwnerEntity, TRelatedEntity> builder,
string? schema)
where TOwnerEntity : class
where TRelatedEntity : class
{
switch (builder)
{
case IInfrastructure<OwnedNavigationBuilder<TOwnerEntity, TRelatedEntity>> genericBuilder:
genericBuilder.Instance.ToView(schema);
break;
case IInfrastructure<OwnedNavigationBuilder> nongenericBuilder:
nongenericBuilder.Instance.ToView(schema);
break;
}

return builder;
}

public static ModelBuilderTest.TestOwnedNavigationBuilder<TOwnerEntity, TRelatedEntity> ToView<TOwnerEntity, TRelatedEntity>(
this ModelBuilderTest.TestOwnedNavigationBuilder<TOwnerEntity, TRelatedEntity> builder,
string? name,
string? schema)
where TOwnerEntity : class
where TRelatedEntity : class
{
switch (builder)
{
case IInfrastructure<OwnedNavigationBuilder<TOwnerEntity, TRelatedEntity>> genericBuilder:
genericBuilder.Instance.ToView(name, schema);
break;
case IInfrastructure<OwnedNavigationBuilder> nongenericBuilder:
nongenericBuilder.Instance.ToView(name, schema);
break;
}

return builder;
}

public static ModelBuilderTest.TestEntityTypeBuilder<TEntity> HasCheckConstraint<TEntity>(
this ModelBuilderTest.TestEntityTypeBuilder<TEntity> builder,
string name,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -936,6 +936,84 @@ public virtual void Owned_type_collections_can_be_mapped_to_different_tables()
Assert.Null(owned.GetSchema());
}

[ConditionalFact]
public virtual void Owned_type_collections_can_be_mapped_to_a_view()
{
var modelBuilder = CreateModelBuilder();

modelBuilder.Entity<Customer>().OwnsMany(
c => c.Orders,
r =>
{
r.HasKey(o => o.OrderId);
r.Ignore(o => o.OrderCombination);
r.Ignore(o => o.Details);
r.ToView("bar", "foo");
});

var model = modelBuilder.FinalizeModel();

var owner = model.FindEntityType(typeof(Customer));
var ownership = owner.FindNavigation(nameof(Customer.Orders)).ForeignKey;
var owned = ownership.DeclaringEntityType;
Assert.True(ownership.IsOwnership);
Assert.Equal(nameof(Order.Customer), ownership.DependentToPrincipal.Name);
Assert.Empty(ownership.GetMappedConstraints());

Assert.Equal(nameof(Customer), owner.GetTableName());
Assert.Null(owner.GetSchema());

Assert.Null(owned.GetForeignKeys().Single().GetConstraintName());
Assert.Single(owned.GetIndexes());
Assert.Null(owned.FindPrimaryKey().GetName());
Assert.Equal(
new[] { nameof(Order.OrderId), nameof(Order.AnotherCustomerId), nameof(Order.CustomerId) },
owned.GetProperties().Select(p => p.GetColumnBaseName()));
Assert.Null(owned.GetTableName());
Assert.Null(owned.GetSchema());
Assert.Equal("bar", owned.GetViewName());
Assert.Equal("foo", owned.GetViewSchema());
}

[ConditionalFact]
public virtual void Owner_can_be_mapped_to_a_view()
{
var modelBuilder = CreateModelBuilder();

modelBuilder.Entity<Customer>().OwnsMany(
c => c.Orders,
r =>
{
r.HasKey(o => o.OrderId);
r.Ignore(o => o.OrderCombination);
r.Ignore(o => o.Details);
})
.ToView("bar", "foo");

var model = modelBuilder.FinalizeModel();

var owner = model.FindEntityType(typeof(Customer));
var ownership = owner.FindNavigation(nameof(Customer.Orders)).ForeignKey;
var owned = ownership.DeclaringEntityType;
Assert.True(ownership.IsOwnership);
Assert.Equal(nameof(Order.Customer), ownership.DependentToPrincipal.Name);
Assert.Empty(ownership.GetMappedConstraints());

Assert.Null(owner.GetTableName());
Assert.Null(owner.GetSchema());
Assert.Equal("bar", owner.GetViewName());
Assert.Equal("foo", owner.GetViewSchema());

Assert.Null(owned.GetForeignKeys().Single().GetConstraintName());
Assert.Equal("IX_Order_CustomerId", owned.GetIndexes().Single().GetDatabaseName());
Assert.Equal("PK_Order", owned.FindPrimaryKey().GetName());
Assert.Equal(
new[] { nameof(Order.OrderId), nameof(Order.AnotherCustomerId), nameof(Order.CustomerId) },
owned.GetProperties().Select(p => p.GetColumnBaseName()));
Assert.Equal(nameof(Order), owned.GetTableName());
Assert.Null(owned.GetSchema());
}

public override void Can_configure_owned_type()
{
var modelBuilder = CreateModelBuilder();
Expand Down

0 comments on commit 7dfd66c

Please sign in to comment.