Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -644,8 +644,7 @@ protected virtual void GenerateComplexPropertyAnnotations(
.Append('.')
.Append("HasDiscriminator");

if (discriminatorProperty.DeclaringType == property.ComplexType
&& discriminatorProperty.Name != "Discriminator")
if (discriminatorProperty.DeclaringType == property.ComplexType)
{
var propertyClrType = FindValueConverter(discriminatorProperty)?.ProviderClrType
.MakeNullable(discriminatorProperty.IsNullable)
Expand Down Expand Up @@ -953,8 +952,7 @@ protected virtual void GenerateEntityTypeAnnotations(
.Append('.')
.Append("HasDiscriminator");

if (discriminatorProperty.DeclaringType == entityType
&& discriminatorProperty.Name != "Discriminator")
if (discriminatorProperty.DeclaringType == entityType)
{
var propertyClrType = FindValueConverter(discriminatorProperty)?.ProviderClrType
.MakeNullable(discriminatorProperty.IsNullable)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
using NetTopologySuite;
using NetTopologySuite.Geometries;
using Xunit.Sdk;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;

// ReSharper disable InconsistentNaming
// ReSharper disable UnusedAutoPropertyAccessor.Local
Expand Down Expand Up @@ -2022,7 +2023,7 @@ public virtual void CheckConstraint_is_only_stored_in_snapshot_once_for_TPH()

b.ToTable("BaseEntity", "DefaultSchema");

b.HasDiscriminator().HasValue("BaseEntity");
b.HasDiscriminator<string>("Discriminator").HasValue("BaseEntity");

b.UseTphMappingStrategy();
});
Expand Down Expand Up @@ -2354,7 +2355,7 @@ public virtual void BaseType_is_stored_in_snapshot()

b.ToTable("BaseEntity", "DefaultSchema");

b.HasDiscriminator().HasValue("BaseEntity");
b.HasDiscriminator<string>("Discriminator").HasValue("BaseEntity");

b.UseTphMappingStrategy();
});
Expand Down Expand Up @@ -2425,7 +2426,7 @@ public virtual void Discriminator_annotations_are_stored_in_snapshot()

b.ToTable("BaseEntity", "DefaultSchema");

b.HasDiscriminator().IsComplete(true).HasValue("BaseEntity");
b.HasDiscriminator<string>("Discriminator").IsComplete(true).HasValue("BaseEntity");

b.UseTphMappingStrategy();
});
Expand Down Expand Up @@ -2500,7 +2501,7 @@ public virtual void Converted_discriminator_annotations_are_stored_in_snapshot()

b.ToTable("BaseEntityWithStructDiscriminator", "DefaultSchema");

b.HasDiscriminator().IsComplete(true).HasValue("Base");
b.HasDiscriminator<string>("Discriminator").IsComplete(true).HasValue("Base");

b.UseTphMappingStrategy();
});
Expand All @@ -2527,13 +2528,18 @@ public virtual void Converted_discriminator_annotations_are_stored_in_snapshot()
"""),
o =>
{
var baseEntityType = o.FindEntityType(typeof(BaseEntityWithStructDiscriminator));
Assert.Equal(
"Discriminator",
o.FindEntityType(typeof(BaseEntityWithStructDiscriminator))[CoreAnnotationNames.DiscriminatorProperty]);
baseEntityType[CoreAnnotationNames.DiscriminatorProperty]);

Assert.Equal(
"Base",
o.FindEntityType(typeof(BaseEntityWithStructDiscriminator))[CoreAnnotationNames.DiscriminatorValue]);
baseEntityType[CoreAnnotationNames.DiscriminatorValue]);

var discriminatorProperty = baseEntityType.FindDiscriminatorProperty();
Assert.Equal(typeof(string), discriminatorProperty.ClrType);
Assert.Equal("Discriminator", discriminatorProperty.Name);

Assert.Equal(
"Another",
Expand Down Expand Up @@ -3375,6 +3381,55 @@ public virtual void Discriminator_of_enum_to_string()
Assert.False(discriminatorProperty.IsNullable);
});

[ConditionalFact]
public virtual void Discriminator_with_non_string_default_name_is_stored_in_snapshot()
=> Test(
builder =>
{
builder.Entity<DerivedType>().HasBaseType<BaseType>();
builder.Entity<BaseType>()
.Ignore(b => b.Navigation)
.HasDiscriminator<int>("Discriminator")
.HasValue<BaseType>(0)
.HasValue<DerivedType>(1);
},
AddBoilerPlate(
GetHeading()
+ """
modelBuilder.Entity("Microsoft.EntityFrameworkCore.Migrations.Design.CSharpMigrationsGeneratorTest+BaseType", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");

SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));

b.Property<int>("Discriminator")
.HasColumnType("int");

b.HasKey("Id");

b.ToTable("BaseType", "DefaultSchema");

b.HasDiscriminator<int>("Discriminator").HasValue(0);

b.UseTphMappingStrategy();
});

modelBuilder.Entity("Microsoft.EntityFrameworkCore.Migrations.Design.CSharpMigrationsGeneratorTest+DerivedType", b =>
{
b.HasBaseType("Microsoft.EntityFrameworkCore.Migrations.Design.CSharpMigrationsGeneratorTest+BaseType");

b.HasDiscriminator().HasValue(1);
});
"""),
model =>
{
var discriminatorProperty = model.FindEntityType(typeof(BaseType))!.FindDiscriminatorProperty();
Assert.Equal(typeof(int), discriminatorProperty.ClrType);
Assert.Equal("Discriminator", discriminatorProperty.Name);
});

[ConditionalFact]
public virtual void Temporal_table_information_is_stored_in_snapshot()
=> Test(
Expand Down Expand Up @@ -4939,7 +4994,7 @@ public virtual void Property_column_name_is_stored_in_snapshot_when_DefaultColum

b.ToTable("BarBase", "DefaultSchema");

b.HasDiscriminator().HasValue("BarBase");
b.HasDiscriminator<string>("Discriminator").HasValue("BarBase");

b.UseTphMappingStrategy();
});
Expand Down Expand Up @@ -5155,7 +5210,7 @@ public virtual void Property_column_name_on_specific_table_is_stored_in_snapshot

b.ToTable("BaseEntity", "DefaultSchema");

b.HasDiscriminator().HasValue("BaseEntity");
b.HasDiscriminator<string>("Discriminator").HasValue("BaseEntity");

b.UseTphMappingStrategy();
});
Expand Down Expand Up @@ -7718,7 +7773,7 @@ public virtual void Do_not_generate_entity_type_builder_again_if_no_foreign_key_

b.ToTable("BaseType", "DefaultSchema");

b.HasDiscriminator().HasValue("BaseType");
b.HasDiscriminator<string>("Discriminator").HasValue("BaseType");

b.UseTphMappingStrategy();
});
Expand Down