You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
EF7 > Migrations are wrong when having the same property name in multiple child classes
There is a problem in EF7 when you use TPH.
If you have a root class that has two children and both those children have the same property names EF7 fails to create a correct migration.
It will try to map those properties to a separate table but without a table name.
This causes the migration to:
Not be executable against a DB (dotnet ef database up)
Not be removable (dotnet ef migrations remove)
E.g.
modelBuilder.Entity("EF7.MigrationBug.Models.ActivitySubmissionIntegrationDeletedEventDocument", b =>{b.HasBaseType("EF7.MigrationBug.Models.ActivitySubmissionIntegrationEventDocument");b.ToTable(t =>{t.Property("IntegrationId").HasColumnName("ActivitySubmissionIntegrationEventDocument_IntegrationId");t.Property("IntegrationName").HasColumnName("ActivitySubmissionIntegrationEventDocument_IntegrationName");t.Property("IntegrationType").HasColumnName("ActivitySubmissionIntegrationEventDocument_IntegrationType");});b.HasDiscriminator().HasValue("ActivitySubmissionIntegrationDeletedEventDocument");});
System.InvalidOperationException: Table name must be specified to configure a table-specific property mapping.
at Microsoft.EntityFrameworkCore.Metadata.Builders.TableBuilder.GetStoreObjectIdentifier()
at Microsoft.EntityFrameworkCore.Metadata.Builders.TableBuilder.Property(String propertyName)
at EF7.MigrationBug.Migrations.Init.<>c.<BuildTargetModel>b__2_9(TableBuilder t) in C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug\Migrations\20221231100512_Init.Designer.cs:line 123
at Microsoft.EntityFrameworkCore.RelationalEntityTypeBuilderExtensions.ToTable(EntityTypeBuilder entityTypeBuilder, Action`1 buildAction)
at EF7.MigrationBug.Migrations.Init.<>c.<BuildTargetModel>b__2_6(EntityTypeBuilder b) in C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug\Migrations\20221231100512_Init.Designer.cs:line 121
at Microsoft.EntityFrameworkCore.ModelBuilder.Entity(String name, Action`1 buildAction)
at EF7.MigrationBug.Migrations.Init.BuildTargetModel(ModelBuilder modelBuilder) in C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug\Migrations\20221231100512_Init.Designer.cs:line 108
at Microsoft.EntityFrameworkCore.Migrations.Migration.<get_TargetModel>g__Create|5_0()
at Microsoft.EntityFrameworkCore.Migrations.Migration.get_TargetModel()
at Microsoft.EntityFrameworkCore.Migrations.Design.MigrationsScaffolder.RemoveMigration(String projectDir, String rootNamespace, Boolean force, String language)
at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.RemoveMigration(String contextType, Boolean force)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.RemoveMigrationImpl(String contextType, Boolean force)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.RemoveMigration.<>c__DisplayClass0_0.<.ctor>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0`1.<Execute>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
Table name must be specified to configure a table-specific property mapping.
Include verbose output
PS C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug> dotnet ef migrations remove --verbose
Using project 'C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug\EF7.MigrationBug.csproj'.
Using startup project 'C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug\EF7.MigrationBug.csproj'.
Writing 'C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug\obj\EF7.MigrationBug.csproj.EntityFrameworkCore.targets'...
dotnet msbuild /target:GetEFProjectMetadata /property:EFProjectMetadataFile=C:\Users\Brecht\AppData\Local\Temp\tmpE12.tmp /verbosity:quiet /nologo C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug\EF7.MigrationBug.csproj
Writing 'C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug\obj\EF7.MigrationBug.csproj.EntityFrameworkCore.targets'...
dotnet msbuild /target:GetEFProjectMetadata /property:EFProjectMetadataFile=C:\Users\Brecht\AppData\Local\Temp\tmp1026.tmp /verbosity:quiet /nologo C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug\EF7.MigrationBug.csproj
Build started...
dotnet build C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug\EF7.MigrationBug.csproj /verbosity:quiet /nologo
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:01.07
Build succeeded.
dotnet exec --depsfile C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug\bin\Debug\net7.0\EF7.MigrationBug.deps.json --additionalprobingpath C:\Users\Brecht\.nuget\packages --additionalprobingpath "C:\Program Files\dotnet\sdk\NuGetFallbackFolder" --runtimeconfig C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.Mi
grationBug\bin\Debug\net7.0\EF7.MigrationBug.runtimeconfig.json C:\Users\Brecht\.dotnet\tools\.store\dotnet-ef\7.0.1\dotnet-ef\7.0.1\tools\net6.0\any\tools\netcoreapp2.0\any\ef.dll migrations remove --assembly C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug\bin\Debug\net7.0\EF7.MigrationBug.dll --project
C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug\EF7.MigrationBug.csproj --startup-assembly C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug\bin\Debug\net7.0\EF7.MigrationBug.dll --startup-project C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug\EF7.MigrationBug.csproj --project-dir C:\Intigr
iti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug\ --root-namespace EF7.MigrationBug --language C# --framework net7.0 --working-dir C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug --verbose
Using assembly 'EF7.MigrationBug'.
Using startup assembly 'EF7.MigrationBug'.
Using application base 'C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug\bin\Debug\net7.0'.
Using working directory 'C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug'.
Using root namespace 'EF7.MigrationBug'.
Using project directory 'C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug\'.
Remaining arguments: .
Finding DbContext classes...
Finding IDesignTimeDbContextFactory implementations...
Finding application service provider in assembly 'EF7.MigrationBug'...
Finding Microsoft.Extensions.Hosting service provider...
No static method 'CreateHostBuilder(string[])' was found on class 'Program'.
No application service provider was found.
Finding DbContext classes in the project...
Found DbContext 'DbCtx'.
Using context 'DbCtx'.
Finding design-time services referenced by assembly 'EF7.MigrationBug'...
Finding design-time services referenced by assembly 'EF7.MigrationBug'...
No referenced design-time services were found.
Finding design-time services for provider 'Npgsql.EntityFrameworkCore.PostgreSQL'...
Using design-time services from provider 'Npgsql.EntityFrameworkCore.PostgreSQL'.
Finding IDesignTimeServices implementations in assembly 'EF7.MigrationBug'...
No design-time services were found.
The property 'ActivityEventDocument.Discriminator' was created in shadow state because there are no eligible CLR members with a matching name.
'DbCtx' disposed.
System.InvalidOperationException: Table name must be specified to configure a table-specific property mapping.
at Microsoft.EntityFrameworkCore.Metadata.Builders.TableBuilder.GetStoreObjectIdentifier()
at Microsoft.EntityFrameworkCore.Metadata.Builders.TableBuilder.Property(String propertyName)
at EF7.MigrationBug.Migrations.Init.<>c.<BuildTargetModel>b__2_9(TableBuilder t) in C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug\Migrations\20221231100842_Init.Designer.cs:line 123
at Microsoft.EntityFrameworkCore.ModelBuilder.Entity(String name, Action`1 buildAction)
at EF7.MigrationBug.Migrations.Init.BuildTargetModel(ModelBuilder modelBuilder) in C:\Intigriti\POC\EF7\EF7.MigrationBug\EF7.MigrationBug\Migrations\20221231100842_Init.Designer.cs:line 108
at Microsoft.EntityFrameworkCore.Migrations.Migration.<get_TargetModel>g__Create|5_0()
at Microsoft.EntityFrameworkCore.Migrations.Migration.get_TargetModel()
at Microsoft.EntityFrameworkCore.Migrations.Design.MigrationsScaffolder.RemoveMigration(String projectDir, String rootNamespace, Boolean force, String language)
at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.RemoveMigration(String contextType, Boolean force)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.RemoveMigrationImpl(String contextType, Boolean force)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.RemoveMigration.<>c__DisplayClass0_0.<.ctor>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0`1.<Execute>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
Table name must be specified to configure a table-specific property mapping.
Include provider and version information
EF Core version: 7.0.1
Database provider: Npgsql.EntityFrameworkCore.PostgreSQL
Target framework: NET 7.0
Operating system: Win 10
IDE: JetBrains Rider 2022.2.4
The text was updated successfully, but these errors were encountered:
EF7 > Migrations are wrong when having the same property name in multiple child classes
There is a problem in EF7 when you use TPH.
If you have a root class that has two children and both those children have the same property names EF7 fails to create a correct migration.
It will try to map those properties to a separate table but without a table name.
This causes the migration to:
E.g.
Include your code
Repository: https://github.com/ErazerBrecht/EF7-Bug
In this PR: ErazerBrecht/EF7-Bug#1 you see the differences between EF6 & EF7 migration.
Include stack traces
Include verbose output
Include provider and version information
EF Core version: 7.0.1
Database provider: Npgsql.EntityFrameworkCore.PostgreSQL
Target framework: NET 7.0
Operating system: Win 10
IDE: JetBrains Rider 2022.2.4
The text was updated successfully, but these errors were encountered: