diff --git a/src/EFCore.Relational/Extensions/RelationalPropertyExtensions.cs b/src/EFCore.Relational/Extensions/RelationalPropertyExtensions.cs
index 187f3297208..157dc23d827 100644
--- a/src/EFCore.Relational/Extensions/RelationalPropertyExtensions.cs
+++ b/src/EFCore.Relational/Extensions/RelationalPropertyExtensions.cs
@@ -1145,7 +1145,7 @@ public static void SetIsFixedLength(this IMutableProperty property, bool? fixedL
/// if the mapped column is nullable; otherwise.
public static bool IsColumnNullable(this IReadOnlyProperty property)
=> property.IsNullable
- || (property.DeclaringType is IReadOnlyEntityType entityType
+ || (property.DeclaringType.ContainingEntityType is IReadOnlyEntityType entityType
&& entityType.BaseType != null
&& entityType.GetMappingStrategy() == RelationalAnnotationNames.TphMappingStrategy);
diff --git a/test/EFCore.Relational.Tests/ModelBuilding/RelationalModelBuilderTest.cs b/test/EFCore.Relational.Tests/ModelBuilding/RelationalModelBuilderTest.cs
index a888a5810ae..d0fb6786d21 100644
--- a/test/EFCore.Relational.Tests/ModelBuilding/RelationalModelBuilderTest.cs
+++ b/test/EFCore.Relational.Tests/ModelBuilding/RelationalModelBuilderTest.cs
@@ -341,6 +341,30 @@ public virtual void Configuring_direction_on_RowsAffectedParameter_throws()
public abstract class RelationalComplexTypeTestBase : ComplexTypeTestBase
{
+ [ConditionalFact]
+ public virtual void Can_use_TPH()
+ {
+ var modelBuilder = CreateModelBuilder();
+
+ modelBuilder
+ .Ignore()
+ .Ignore()
+ .Entity();
+
+ modelBuilder
+ .Entity()
+ .ComplexProperty(e => e.Customer)
+ .Ignore(c => c.Details)
+ .Ignore(c => c.Orders)
+ .Property(c => c.Name).IsRequired();
+
+ var model = modelBuilder.FinalizeModel();
+ var complexProperty = model.FindEntityType(typeof(ComplexProperties))!.GetComplexProperties().Single();
+ var property = complexProperty.ComplexType.FindProperty(nameof(Customer.Name))!;
+
+ Assert.True(property.IsColumnNullable());
+ }
+
[ConditionalFact]
public virtual void Can_use_table_splitting()
{
diff --git a/test/EFCore.Tests/ModelBuilding/TestModel.cs b/test/EFCore.Tests/ModelBuilding/TestModel.cs
index 037a7e5f685..8aa6a51e038 100644
--- a/test/EFCore.Tests/ModelBuilding/TestModel.cs
+++ b/test/EFCore.Tests/ModelBuilding/TestModel.cs
@@ -894,9 +894,13 @@ protected interface IReplaceable
int Property { get; set; }
}
- protected class ComplexProperties
+ protected class ComplexPropertiesBase
{
public int Id { get; set; }
+ }
+
+ protected class ComplexProperties : ComplexPropertiesBase
+ {
public required Customer Customer { get; set; }
public required DoubleProperty DoubleProperty { get; set; }
public required IndexedClass IndexedClass { get; set; }