Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replacing PK to PK TPT or TPC dependent with different type fails #29874

Closed
ajcvickers opened this issue Dec 16, 2022 · 0 comments · Fixed by #32007
Closed

Replacing PK to PK TPT or TPC dependent with different type fails #29874

ajcvickers opened this issue Dec 16, 2022 · 0 comments · Fixed by #32007
Labels
area-model-building area-save-changes closed-fixed The issue has been fixed and is/will be included in the release indicated by the issue milestone. type-bug
Milestone

Comments

@ajcvickers
Copy link
Contributor

Same scenario as #29789, except that this also did not work in EF Core 6.0.

When using TPT, a new row is inserted for the new type, but the old row for the existing type is not removed.

When using TPC, the following is thrown during model building:

System.InvalidOperationException
Nullable object must have a value.
   at System.Nullable`1.get_Value()
   at Microsoft.EntityFrameworkCore.Metadata.Internal.RelationalForeignKeyExtensions.<GetDefaultName>g__ShareAnyFragments|2_0(IReadOnlyEntityType entityType1, IReadOnlyEntityType entityType2) in C:\github\efcore\src\EFCore.Relational\Metadata\Internal\RelationalForeignKeyExtensions.cs:line 334
   at Microsoft.EntityFrameworkCore.Metadata.Internal.RelationalForeignKeyExtensions.GetDefaultName(IReadOnlyForeignKey foreignKey, StoreObjectIdentifier& storeObject, StoreObjectIdentifier& principalStoreObject, IDiagnosticsLogger`1 logger) in C:\github\efcore\src\EFCore.Relational\Metadata\Internal\RelationalForeignKeyExtensions.cs:line 295
   at Microsoft.EntityFrameworkCore.Metadata.Internal.RelationalForeignKeyExtensions.GetConstraintName(IReadOnlyForeignKey foreignKey, StoreObjectIdentifier& storeObject, StoreObjectIdentifier& principalStoreObject, IDiagnosticsLogger`1 logger) in C:\github\efcore\src\EFCore.Relational\Metadata\Internal\RelationalForeignKeyExtensions.cs:line 185
   at Microsoft.EntityFrameworkCore.RelationalForeignKeyExtensions.GetConstraintName(IReadOnlyForeignKey foreignKey, StoreObjectIdentifier& storeObject, StoreObjectIdentifier& principalStoreObject) in C:\github\efcore\src\EFCore.Relational\Extensions\RelationalForeignKeyExtensions.cs:line 48
   at Microsoft.EntityFrameworkCore.Metadata.Conventions.SharedTableConvention.TryUniquifyForeignKeyNames(IConventionEntityType entityType, Dictionary`2 foreignKeys, StoreObjectIdentifier& storeObject, Int32 maxLength) in C:\github\efcore\src\EFCore.Relational\Metadata\Conventions\SharedTableConvention.cs:line 486
   at Microsoft.EntityFrameworkCore.Metadata.Conventions.SharedTableConvention.ProcessModelFinalizing(IConventionModelBuilder modelBuilder, IConventionContext`1 context) in C:\github\efcore\src\EFCore.Relational\Metadata\Conventions\SharedTableConvention.cs:line 89
   at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ImmediateConventionScope.OnModelFinalizing(IConventionModelBuilder modelBuilder) in C:\github\efcore\src\EFCore\Metadata\Conventions\Internal\ConventionDispatcher.ImmediateConventionScope.cs:line 77
   at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.OnModelFinalizing(IConventionModelBuilder modelBuilder) in C:\github\efcore\src\EFCore\Metadata\Conventions\Internal\ConventionDispatcher.cs:line 57
   at Microsoft.EntityFrameworkCore.Metadata.Internal.Model.FinalizeModel() in C:\github\efcore\src\EFCore\Metadata\Internal\Model.cs:line 921
   at Microsoft.EntityFrameworkCore.ModelBuilder.FinalizeModel() in C:\github\efcore\src\EFCore\ModelBuilder.cs:line 631
   at Microsoft.EntityFrameworkCore.TestUtilities.TestModelSource.CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, ModelDependencies modelDependencies) in C:\github\efcore\test\EFCore.Specification.Tests\TestUtilities\TestModelSource.cs:line 39
   at Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.GetModel(DbContext context, ModelCreationDependencies modelCreationDependencies, Boolean designTime) in C:\github\efcore\src\EFCore\Infrastructure\ModelSource.cs:line 69
   at Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel(Boolean designTime) in C:\github\efcore\src\EFCore\Internal\DbContextServices.cs:line 86
   at Microsoft.EntityFrameworkCore.Internal.DbContextServices.get_Model() in C:\github\efcore\src\EFCore\Internal\DbContextServices.cs:line 113
   at Microsoft.EntityFrameworkCore.Infrastructure.EntityFrameworkServicesBuilder.<>c.<TryAddCoreServices>b__8_4(IServiceProvider p) in C:\github\efcore\src\EFCore\Infrastructure\EntityFrameworkServicesBuilder.cs:line 281
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass2_0.<RealizeService>b__0(ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
   at Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependencies() in C:\github\efcore\src\EFCore\DbContext.cs:line 464
   at Microsoft.EntityFrameworkCore.DbContext.get_ContextServices() in C:\github\efcore\src\EFCore\DbContext.cs:line 446
   at Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider() in C:\github\efcore\src\EFCore\DbContext.cs:line 400
   at Microsoft.EntityFrameworkCore.DbContext.Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<System.IServiceProvider>.get_Instance() in C:\github\efcore\src\EFCore\DbContext.cs:line 2215
   at Microsoft.EntityFrameworkCore.Infrastructure.Internal.InfrastructureExtensions.GetService[TService](IInfrastructure`1 accessor) in C:\github\efcore\src\EFCore\Infrastructure\Internal\InfrastructureExtensions.cs:line 25
   at Microsoft.EntityFrameworkCore.Infrastructure.AccessorExtensions.GetService[TService](IInfrastructure`1 accessor) in C:\github\efcore\src\EFCore\Infrastructure\AccessorExtensions.cs:line 42
   at Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.get_Dependencies() in C:\github\efcore\src\EFCore\Infrastructure\DatabaseFacade.cs:line 31
   at Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.CreateExecutionStrategy() in C:\github\efcore\src\EFCore\Infrastructure\DatabaseFacade.cs:line 352
   at Microsoft.EntityFrameworkCore.TestUtilities.DatabaseFacadeExtensions.EnsureCreatedResiliently(DatabaseFacade façade) in C:\github\efcore\test\EFCore.Specification.Tests\TestUtilities\DatabaseFacadeExtensions.cs:line 9
   at Microsoft.EntityFrameworkCore.TestUtilities.SqlServerTestStore.Initialize(Func`1 createContext, Action`1 seed, Action`1 clean) in C:\github\efcore\test\EFCore.SqlServer.FunctionalTests\TestUtilities\SqlServerTestStore.cs:line 101
   at Microsoft.EntityFrameworkCore.TestUtilities.TestStore.<>c__DisplayClass13_0.<Initialize>b__0() in C:\github\efcore\test\EFCore.Specification.Tests\TestUtilities\TestStore.cs:line 36
   at Microsoft.EntityFrameworkCore.TestUtilities.TestStoreIndex.CreateShared(String name, Action initializeDatabase) in C:\github\efcore\test\EFCore.Specification.Tests\TestUtilities\TestStoreIndex.cs:line 25
   at Microsoft.EntityFrameworkCore.TestUtilities.TestStore.Initialize(IServiceProvider serviceProvider, Func`1 createContext, Action`1 seed, Action`1 clean) in C:\github\efcore\test\EFCore.Specification.Tests\TestUtilities\TestStore.cs:line 36
   at Microsoft.EntityFrameworkCore.TestUtilities.RelationalTestStore.Initialize(IServiceProvider serviceProvider, Func`1 createContext, Action`1 seed, Action`1 clean) in C:\github\efcore\test\EFCore.Relational.Specification.Tests\TestUtilities\RelationalTestStore.cs:line 40
   at Microsoft.EntityFrameworkCore.SharedStoreFixtureBase`1.InitializeAsync() in C:\github\efcore\test\EFCore.Specification.Tests\SharedStoreFixtureBase.cs:line 65
   at Xunit.Sdk.ExceptionAggregator.RunAsync(Func`1 code) in /_/src/xunit.core/Sdk/ExceptionAggregator.cs:line 90
@ajcvickers ajcvickers added this to the Backlog milestone Dec 22, 2022
AndriySvyryd added a commit that referenced this issue Oct 10, 2023
@AndriySvyryd AndriySvyryd added the closed-fixed The issue has been fixed and is/will be included in the release indicated by the issue milestone. label Oct 10, 2023
@AndriySvyryd AndriySvyryd removed their assignment Oct 10, 2023
@AndriySvyryd AndriySvyryd modified the milestones: Backlog, 8.0.0 Oct 10, 2023
AndriySvyryd added a commit that referenced this issue Oct 10, 2023
AndriySvyryd added a commit that referenced this issue Oct 10, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-model-building area-save-changes closed-fixed The issue has been fixed and is/will be included in the release indicated by the issue milestone. type-bug
Projects
None yet
2 participants