Skip to content

Unexpected PendingModelChangesWarning on initial creation of database via migrations #35110

@peteraritchie

Description

@peteraritchie

When the entity config doesn't include OwnsMany the error does not occur. his can be toggled with INCLUDE_ACCOUNT_HOLDERS: remove INCLUDE_ACCOUNT_HOLDERS as a compile-time constant from Domain and Infrastructure and the error does not occur.

I could not reproduce when everything was in a single project.

Steps to reproduce:

  1. git clone -b main --depth 1 https://github.com/peteraritchie/EfPendingModelChangesWarning.git
  2. cd EfPendingModelChangesWarning/src
  3. dotnet ef migrations add InitialCreate --startup-project Api --project Infrastructure
  4. dotnet ef database update --startup-project Api --project Infrastructure

Include your code

See steps and https://github.com/peteraritchie/EfPendingModelChangesWarning

Include stack traces

Output from dotnet ef database update:

System.InvalidOperationException: An error was generated for warning 'Microsoft.EntityFrameworkCore.Migrations.PendingModelChangesWarning': The model for context 'AccountSqliteDbContext' has pending changes. Add a new migration before updating the database. This exception can be suppressed or logged by passing event ID 'RelationalEventId.PendingModelChangesWarning' to the 'ConfigureWarnings' method in 'DbContext.OnConfiguring' or 'AddDbContext'.
   at Microsoft.EntityFrameworkCore.Diagnostics.EventDefinition`1.Log[TLoggerCategory](IDiagnosticsLogger`1 logger, TParam arg)
   at Microsoft.EntityFrameworkCore.Diagnostics.RelationalLoggerExtensions.PendingModelChangesWarning(IDiagnosticsLogger`1 diagnostics, Type contextType)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
   at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_0.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
An error was generated for warning 'Microsoft.EntityFrameworkCore.Migrations.PendingModelChangesWarning': The model for context 'AccountSqliteDbContext' has pending changes. Add a new migration before updating the database. This exception can be suppressed or logged by passing event ID 'RelationalEventId.PendingModelChangesWarning' to the 'ConfigureWarnings' method in 'DbContext.OnConfiguring' or 'AddDbContext'.

Include verbose output

Verbose output from dotnet ef --verbose migrations add InitialCreate --startup-project Api --project Infrastructure

Using project 'C:\Users\peter\src\experiment\DDDReference\src\Infrastructure\Pri.DDDReference.Infrastructure.csproj'.
Using startup project 'C:\Users\peter\src\experiment\DDDReference\src\Api\Pri.DDDReference.Api.csproj'.
dotnet msbuild /target:GetEFProjectMetadata /property:EFProjectMetadataFile=C:\Users\peter\AppData\Local\Temp\tmpbpsjyc.tmp /verbosity:quiet /nologo C:\Users\peter\src\experiment\DDDReference\src\Infrastructure\Pri.DDDReference.Infrastructure.csproj
dotnet msbuild /target:GetEFProjectMetadata /property:EFProjectMetadataFile=C:\Users\peter\AppData\Local\Temp\tmpsuql5r.tmp /verbosity:quiet /nologo C:\Users\peter\src\experiment\DDDReference\src\Api\Pri.DDDReference.Api.csproj
Build started...
dotnet build C:\Users\peter\src\experiment\DDDReference\src\Api\Pri.DDDReference.Api.csproj /verbosity:quiet /nologo /p:PublishAot=false
C:\Users\peter\src\experiment\DDDReference\src\Domain\PostalAddress.cs(5,16): warning CS8618: Non-nullable property 'Street' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable. [C:\Users\peter\src\experiment\DDDReference\src\Domain\Pri.DDDReference.Domain.csproj]

Build succeeded.

C:\Users\peter\src\experiment\DDDReference\src\Domain\PostalAddress.cs(5,16): warning CS8618: Non-nullable property 'Street' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable. [C:\Users\peter\src\experiment\DDDReference\src\Domain\Pri.DDDReference.Domain.csproj]
    1 Warning(s)
    0 Error(s)

Time Elapsed 00:00:06.83

Build succeeded.
dotnet exec --depsfile C:\Users\peter\src\experiment\DDDReference\src\Api\bin\Debug\net8.0\Pri.DDDReference.Api.deps.json --additionalprobingpath C:\Users\peter\.nuget\packages --additionalprobingpath "C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages" --additionalprobingpath "C:\Program Files\dotnet\sdk\NuGetFallbackFolder" --runtimeconfig C:\Users\peter\src\experiment\DDDReference\src\Api\bin\Debug\net8.0\Pri.DDDReference.Api.runtimeconfig.json C:\Users\peter\.dotnet\tools\.store\dotnet-ef\9.0.0\dotnet-ef\9.0.0\tools\net8.0\any\tools\netcoreapp2.0\any\ef.dll migrations add InitialCreate --assembly C:\Users\peter\src\experiment\DDDReference\src\Api\bin\Debug\net8.0\Pri.DDDReference.Infrastructure.dll --project C:\Users\peter\src\experiment\DDDReference\src\Infrastructure\Pri.DDDReference.Infrastructure.csproj --startup-assembly C:\Users\peter\src\experiment\DDDReference\src\Api\bin\Debug\net8.0\Pri.DDDReference.Api.dll --startup-project C:\Users\peter\src\experiment\DDDReference\src\Api\Pri.DDDReference.Api.csproj --project-dir C:\Users\peter\src\experiment\DDDReference\src\Infrastructure\ --root-namespace Pri.DDDReference.Infrastructure --language C# --framework net8.0 --nullable --working-dir C:\Users\peter\src\experiment\DDDReference\src --verbose
Using assembly 'Pri.DDDReference.Infrastructure'.
Using startup assembly 'Pri.DDDReference.Api'.
Using application base 'C:\Users\peter\src\experiment\DDDReference\src\Api\bin\Debug\net8.0'.
Using working directory 'C:\Users\peter\src\experiment\DDDReference\src\Api'.
Using root namespace 'Pri.DDDReference.Infrastructure'.
Using project directory 'C:\Users\peter\src\experiment\DDDReference\src\Infrastructure\'.
Remaining arguments: .
Finding DbContext classes...
Finding IDesignTimeDbContextFactory implementations...
Finding DbContext classes in the project...
Found DbContext 'AccountSqliteDbContext'.
Finding application service provider in assembly 'Pri.DDDReference.Api'...
Finding Microsoft.Extensions.Hosting service provider...
Using environment 'Development'.
Using application service provider from Microsoft.Extensions.Hosting.
Using context 'AccountSqliteDbContext'.
Finding design-time services referenced by assembly 'Pri.DDDReference.Api'...
Finding design-time services referenced by assembly 'Pri.DDDReference.Infrastructure'...
No referenced design-time services were found.
Finding design-time services for provider 'Microsoft.EntityFrameworkCore.Sqlite'...
Using design-time services from provider 'Microsoft.EntityFrameworkCore.Sqlite'.
Finding IDesignTimeServices implementations in assembly 'Pri.DDDReference.Api'...
No design-time services were found.
Writing migration to 'C:\Users\peter\src\experiment\DDDReference\src\Infrastructure\Migrations\20241114183900_InitialCreate.cs'.
Writing model snapshot to 'C:\Users\peter\src\experiment\DDDReference\src\Infrastructure\Migrations\AccountSqliteDbContextModelSnapshot.cs'.
Done. To undo this action, use 'ef migrations remove'

verbose output from dotnet ef --verbose database update --startup-project Api --project Infrastructure

Using project 'C:\Users\peter\src\experiment\DDDReference\src\Infrastructure\Pri.DDDReference.Infrastructure.csproj'.
Using startup project 'C:\Users\peter\src\experiment\DDDReference\src\Api\Pri.DDDReference.Api.csproj'.
dotnet msbuild /target:GetEFProjectMetadata /property:EFProjectMetadataFile=C:\Users\peter\AppData\Local\Temp\tmpshmzoi.tmp /verbosity:quiet /nologo C:\Users\peter\src\experiment\DDDReference\src\Infrastructure\Pri.DDDReference.Infrastructure.csproj
dotnet msbuild /target:GetEFProjectMetadata /property:EFProjectMetadataFile=C:\Users\peter\AppData\Local\Temp\tmprm3hs3.tmp /verbosity:quiet /nologo C:\Users\peter\src\experiment\DDDReference\src\Api\Pri.DDDReference.Api.csproj
Build started...
dotnet build C:\Users\peter\src\experiment\DDDReference\src\Api\Pri.DDDReference.Api.csproj /verbosity:quiet /nologo /p:PublishAot=false

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:03.15

Build succeeded.
dotnet exec --depsfile C:\Users\peter\src\experiment\DDDReference\src\Api\bin\Debug\net8.0\Pri.DDDReference.Api.deps.json --additionalprobingpath C:\Users\peter\.nuget\packages --additionalprobingpath "C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages" --additionalprobingpath "C:\Program Files\dotnet\sdk\NuGetFallbackFolder" --runtimeconfig C:\Users\peter\src\experiment\DDDReference\src\Api\bin\Debug\net8.0\Pri.DDDReference.Api.runtimeconfig.json C:\Users\peter\.dotnet\tools\.store\dotnet-ef\9.0.0\dotnet-ef\9.0.0\tools\net8.0\any\tools\netcoreapp2.0\any\ef.dll database update --assembly C:\Users\peter\src\experiment\DDDReference\src\Api\bin\Debug\net8.0\Pri.DDDReference.Infrastructure.dll --project C:\Users\peter\src\experiment\DDDReference\src\Infrastructure\Pri.DDDReference.Infrastructure.csproj --startup-assembly C:\Users\peter\src\experiment\DDDReference\src\Api\bin\Debug\net8.0\Pri.DDDReference.Api.dll --startup-project C:\Users\peter\src\experiment\DDDReference\src\Api\Pri.DDDReference.Api.csproj --project-dir C:\Users\peter\src\experiment\DDDReference\src\Infrastructure\ --root-namespace Pri.DDDReference.Infrastructure --language C# --framework net8.0 --nullable --working-dir C:\Users\peter\src\experiment\DDDReference\src --verbose
Using assembly 'Pri.DDDReference.Infrastructure'.
Using startup assembly 'Pri.DDDReference.Api'.
Using application base 'C:\Users\peter\src\experiment\DDDReference\src\Api\bin\Debug\net8.0'.
Using working directory 'C:\Users\peter\src\experiment\DDDReference\src\Api'.
Using root namespace 'Pri.DDDReference.Infrastructure'.
Using project directory 'C:\Users\peter\src\experiment\DDDReference\src\Infrastructure\'.
Remaining arguments: .
Finding DbContext classes...
Finding IDesignTimeDbContextFactory implementations...
Finding DbContext classes in the project...
Found DbContext 'AccountSqliteDbContext'.
Finding application service provider in assembly 'Pri.DDDReference.Api'...
Finding Microsoft.Extensions.Hosting service provider...
Using environment 'Development'.
Using application service provider from Microsoft.Extensions.Hosting.
Using context 'AccountSqliteDbContext'.
Finding design-time services referenced by assembly 'Pri.DDDReference.Api'...
Finding design-time services referenced by assembly 'Pri.DDDReference.Infrastructure'...
No referenced design-time services were found.
Finding design-time services for provider 'Microsoft.EntityFrameworkCore.Sqlite'...
Using design-time services from provider 'Microsoft.EntityFrameworkCore.Sqlite'.
Finding IDesignTimeServices implementations in assembly 'Pri.DDDReference.Api'...
No design-time services were found.
System.InvalidOperationException: An error was generated for warning 'Microsoft.EntityFrameworkCore.Migrations.PendingModelChangesWarning': The model for context 'AccountSqliteDbContext' has pending changes. Add a new migration before updating the database. This exception can be suppressed or logged by passing event ID 'RelationalEventId.PendingModelChangesWarning' to the 'ConfigureWarnings' method in 'DbContext.OnConfiguring' or 'AddDbContext'.
   at Microsoft.EntityFrameworkCore.Diagnostics.EventDefinition`1.Log[TLoggerCategory](IDiagnosticsLogger`1 logger, TParam arg)
   at Microsoft.EntityFrameworkCore.Diagnostics.RelationalLoggerExtensions.PendingModelChangesWarning(IDiagnosticsLogger`1 diagnostics, Type contextType)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
   at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_0.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
An error was generated for warning 'Microsoft.EntityFrameworkCore.Migrations.PendingModelChangesWarning': The model for context 'AccountSqliteDbContext' has pending changes. Add a new migration before updating the database. This exception can be suppressed or logged by passing event ID 'RelationalEventId.PendingModelChangesWarning' to the 'ConfigureWarnings' method in 'DbContext.OnConfiguring' or 'AddDbContext'.

Include provider and version information

EF Core version: 9.0.0 (first reproduced with 8.0.10
Database provider: Microsoft.EntityFrameworkCore.Sqlite 9.0.0
Target framework: NET 8.0
Operating system: Windows
IDE: Visual Studio 2022 17.12.0

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions