Skip to content

Commit fd2e178

Browse files
committed
Don't exclude derived tables for TPT and TPC
Fixes #30079
1 parent 3b19ba9 commit fd2e178

File tree

4 files changed

+63
-4
lines changed

4 files changed

+63
-4
lines changed

src/EFCore.Relational/Extensions/RelationalEntityTypeExtensions.cs

+5-2
Original file line numberDiff line numberDiff line change
@@ -1379,13 +1379,16 @@ public static bool IsTableExcludedFromMigrations(this IReadOnlyEntityType entity
13791379
return excluded.Value;
13801380
}
13811381

1382-
if (entityType.BaseType != null)
1382+
if (entityType.BaseType != null
1383+
&& entityType.GetMappingStrategy() == RelationalAnnotationNames.TphMappingStrategy)
13831384
{
13841385
return entityType.GetRootType().IsTableExcludedFromMigrations();
13851386
}
13861387

13871388
var ownership = entityType.FindOwnership();
1388-
if (ownership is { IsUnique: true })
1389+
if (ownership is { IsUnique: true }
1390+
&& ownership.DeclaringEntityType.GetTableName() == entityType.GetTableName()
1391+
&& ownership.DeclaringEntityType.GetSchema() == entityType.GetSchema())
13891392
{
13901393
return ownership.PrincipalEntityType.IsTableExcludedFromMigrations();
13911394
}

src/EFCore.Relational/Migrations/Internal/MigrationsModelDiffer.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -558,7 +558,7 @@ protected virtual IEnumerable<MigrationOperation> Diff(
558558
DiffContext diffContext)
559559
{
560560
if (source.IsExcludedFromMigrations
561-
&& target.IsExcludedFromMigrations)
561+
|| target.IsExcludedFromMigrations)
562562
{
563563
// Populate column mapping
564564
foreach (var _ in Diff(source.Columns, target.Columns, diffContext))

test/EFCore.Cosmos.FunctionalTests/ConfigPatternsCosmosTest.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public async Task Should_throw_if_specified_region_is_wrong()
8888
exception.Message);
8989
}
9090

91-
[ConditionalFact(Skip = "Issue #runtime/issues/89118")]
91+
[ConditionalFact]
9292
public async Task Should_not_throw_if_specified_connection_mode_is_right()
9393
{
9494
var connectionMode = ConnectionMode.Direct;

test/EFCore.Relational.Tests/Migrations/Internal/MigrationsModelDifferTest.cs

+56
Original file line numberDiff line numberDiff line change
@@ -8284,6 +8284,62 @@ public void Change_TPT_to_TPC_with_FKs_and_seed_data()
82848284
Assert.Equal(ReferentialAction.Cascade, operation.OnDelete);
82858285
}));
82868286

8287+
[ConditionalFact]
8288+
public void Change_TPT_to_TPC_with_excluded_base()
8289+
=> Execute(
8290+
common =>
8291+
{
8292+
common.Entity(
8293+
"Order",
8294+
x =>
8295+
{
8296+
x.ToTable("Order", t => t.ExcludeFromMigrations());
8297+
x.Property<int>("Id");
8298+
x.Property<string>("Address");
8299+
});
8300+
common.Entity(
8301+
"DetailedOrder",
8302+
x =>
8303+
{
8304+
x.ToTable("DetailedOrder");
8305+
x.HasBaseType("Order");
8306+
x.Property<string>("Description").HasColumnName("Description");
8307+
});
8308+
},
8309+
_ => { },
8310+
target =>
8311+
{
8312+
target.Entity("Order").UseTpcMappingStrategy();
8313+
},
8314+
upOperations =>
8315+
{
8316+
Assert.Equal(2, upOperations.Count);
8317+
8318+
var dropForeignKeyOperation = Assert.IsType<DropForeignKeyOperation>(upOperations[0]);
8319+
Assert.Null(dropForeignKeyOperation.Schema);
8320+
Assert.Equal("DetailedOrder", dropForeignKeyOperation.Table);
8321+
Assert.Equal("FK_DetailedOrder_Order_Id", dropForeignKeyOperation.Name);
8322+
8323+
var addColumnOperation = Assert.IsType<AddColumnOperation>(upOperations[1]);
8324+
Assert.Null(addColumnOperation.Schema);
8325+
Assert.Equal("DetailedOrder", addColumnOperation.Table);
8326+
Assert.Equal("Address", addColumnOperation.Name);
8327+
},
8328+
downOperations =>
8329+
{
8330+
Assert.Equal(2, downOperations.Count);
8331+
8332+
var dropColumnOperation = Assert.IsType<DropColumnOperation>(downOperations[0]);
8333+
Assert.Null(dropColumnOperation.Schema);
8334+
Assert.Equal("DetailedOrder", dropColumnOperation.Table);
8335+
Assert.Equal("Address", dropColumnOperation.Name);
8336+
8337+
var addForeignKeyOperation = Assert.IsType<AddForeignKeyOperation>(downOperations[1]);
8338+
Assert.Null(addForeignKeyOperation.Schema);
8339+
Assert.Equal("DetailedOrder", addForeignKeyOperation.Table);
8340+
Assert.Equal("FK_DetailedOrder_Order_Id", addForeignKeyOperation.Name);
8341+
});
8342+
82878343
[ConditionalFact]
82888344
public void Add_foreign_key_on_base_type()
82898345
=> Execute(

0 commit comments

Comments
 (0)