();
+
+ Assert.Null(index.GetFilter());
+ }
+
+ [ConditionalFact]
+ public virtual void Can_override_TPC_with_TPH()
+ {
+ var modelBuilder = CreateModelBuilder();
+
+ modelBuilder.Entity();
+ modelBuilder.Entity();
+ modelBuilder.Entity();
+ modelBuilder.Entity()
+ .UseTpcMappingStrategy()
+ .UseTphMappingStrategy();
+
+ var model = modelBuilder.FinalizeModel();
+
+ Assert.Equal("Discriminator", model.FindEntityType(typeof(PBase))!.GetDiscriminatorPropertyName());
+ Assert.Equal(nameof(PBase), model.FindEntityType(typeof(PBase))!.GetDiscriminatorValue());
+ Assert.Equal(nameof(P), model.FindEntityType(typeof(P))!.GetDiscriminatorValue());
+ Assert.Equal(nameof(Q), model.FindEntityType(typeof(Q))!.GetDiscriminatorValue());
+ }
+
+ [ConditionalFact]
+ public virtual void TPT_identifying_FK_is_created_only_on_declaring_table()
+ {
+ var modelBuilder = CreateModelBuilder();
+ modelBuilder.Entity()
+ .Ignore(b => b.Bun)
+ .Ignore(b => b.Pickles);
+ modelBuilder.Entity(
+ b =>
+ {
+ b.ToTable("Ingredients");
+ b.Ignore(i => i.BigMak);
+ });
+ modelBuilder.Entity(
+ b =>
+ {
+ b.ToTable("Buns");
+ b.HasOne(i => i.BigMak).WithOne().HasForeignKey(i => i.Id);
+ });
+ modelBuilder.Entity(
+ b =>
+ {
+ b.ToTable("SesameBuns");
+ });
+
+ var model = modelBuilder.FinalizeModel();
+
+ var principalType = model.FindEntityType(typeof(BigMak))!;
+ Assert.Empty(principalType.GetForeignKeys());
+ Assert.Empty(principalType.GetIndexes());
+ Assert.Null(principalType.FindDiscriminatorProperty());
+
+ var ingredientType = model.FindEntityType(typeof(Ingredient))!;
+
+ var bunType = model.FindEntityType(typeof(Bun))!;
+ Assert.Empty(bunType.GetIndexes());
+ Assert.Null(bunType.FindDiscriminatorProperty());
+ var bunFk = bunType.GetDeclaredForeignKeys().Single(fk => !fk.IsBaseLinking());
+ Assert.Equal("FK_Buns_BigMak_Id", bunFk.GetConstraintName());
+ Assert.Equal(
+ "FK_Buns_BigMak_Id", bunFk.GetConstraintName(
+ StoreObjectIdentifier.Create(bunType, StoreObjectType.Table)!.Value,
+ StoreObjectIdentifier.Create(principalType, StoreObjectType.Table)!.Value));
+ Assert.Single(bunFk.GetMappedConstraints());
+
+ var bunLinkingFk = bunType.GetDeclaredForeignKeys().Single(fk => fk.IsBaseLinking());
+ Assert.Equal("FK_Buns_Ingredients_Id", bunLinkingFk.GetConstraintName());
+ Assert.Equal(
+ "FK_Buns_Ingredients_Id", bunLinkingFk.GetConstraintName(
+ StoreObjectIdentifier.Create(bunType, StoreObjectType.Table)!.Value,
+ StoreObjectIdentifier.Create(ingredientType, StoreObjectType.Table)!.Value));
+ Assert.Single(bunLinkingFk.GetMappedConstraints());
+
+ var sesameBunType = model.FindEntityType(typeof(SesameBun))!;
+ Assert.Empty(sesameBunType.GetIndexes());
+ var sesameBunFk = sesameBunType.GetDeclaredForeignKeys().Single();
+ Assert.True(sesameBunFk.IsBaseLinking());
+ Assert.Equal("FK_SesameBuns_Buns_Id", sesameBunFk.GetConstraintName());
+ Assert.Equal(
+ "FK_SesameBuns_Buns_Id", sesameBunFk.GetConstraintName(
+ StoreObjectIdentifier.Create(sesameBunType, StoreObjectType.Table)!.Value,
+ StoreObjectIdentifier.Create(bunType, StoreObjectType.Table)!.Value));
+ Assert.Single(sesameBunFk.GetMappedConstraints());
+ }
+
+ [ConditionalFact]
+ public virtual void TPC_identifying_FKs_are_created_on_all_tables()
+ {
+ var modelBuilder = CreateModelBuilder();
+ modelBuilder.Entity