-
Notifications
You must be signed in to change notification settings - Fork 3.3k
Closed as not planned
Closed as not planned
Copy link
Labels
Description
After updating to EF Core v7.0.4, several of our tests are failing. What they have in common is a nullable private key. I suspect this is caused by #30219.
Include your code
The code below throws during SaveChanges()
. Uncommenting the AppContext switch makes it print "Game:Id=0", which is the expected behavior.
using Microsoft.EntityFrameworkCore;
// AppContext.SetSwitch("Microsoft.EntityFrameworkCore.Issue29985", true);
using (var dbContext = new ZeroKeyDbContext())
{
dbContext.Database.EnsureDeleted();
dbContext.Database.EnsureCreated();
dbContext.Games.Add(new Game { Id = 0 });
dbContext.SaveChanges();
}
using (var dbContext = new ZeroKeyDbContext())
{
var game = dbContext.Games.First();
Console.WriteLine($"Game:Id={game.Id}");
}
public sealed class Game
{
public int? Id { get; set; }
}
public sealed class ZeroKeyDbContext : DbContext
{
public DbSet<Game> Games => Set<Game>();
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseNpgsql(
"Host=localhost;Port=5432;Database=Example;User ID=postgres;Password=postgres;Include Error Detail=true");
}
}
Include stack traces
System.Reflection.TargetInvocationException
HResult=0x80131604
Message=Exception has been thrown by the target of an invocation.
Source=System.Private.CoreLib
StackTrace:
at System.RuntimeMethodHandle.InvokeMethod(Object target, Span`1& arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at Microsoft.EntityFrameworkCore.Update.Internal.RowKeyValueFactoryFactory.Create(IUniqueConstraint key)
at Microsoft.EntityFrameworkCore.Metadata.Internal.UniqueConstraint.GetRowKeyValueFactory()
at Microsoft.EntityFrameworkCore.Update.Internal.CommandBatchPreparer.AddUniqueValueEdges()
at Microsoft.EntityFrameworkCore.Update.Internal.CommandBatchPreparer.TopologicalSort(IEnumerable`1 commands)
at Microsoft.EntityFrameworkCore.Update.Internal.CommandBatchPreparer.<BatchCommands>d__9.MoveNext()
at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(IEnumerable`1 commandBatches, IRelationalConnection connection)
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IList`1 entriesToSave)
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(StateManager stateManager, Boolean acceptAllChangesOnSuccess)
at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(Boolean acceptAllChangesOnSuccess)
at Microsoft.EntityFrameworkCore.DbContext.SaveChanges(Boolean acceptAllChangesOnSuccess)
at Program.<Main>$(String[] args) in D:\Bart\Source\Projects\EFCoreBug29985\EFCoreBug29985\Program.cs:line 11
This exception was originally thrown at this call stack:
Inner Exception 1:
InvalidCastException: Unable to cast object of type 'System.Func`3[System.Nullable`1[System.Int32],System.Nullable`1[System.Int32],System.Boolean]' to type 'System.Func`3[System.Int32,System.Int32,System.Boolean]'.
Include provider and version information
EF Core version: 6.0.4
Database provider: Npgsql.EntityFrameworkCore.PostgreSQL
Target framework: .NET 6.0
Operating system: Windows 11 Pro 22H2
IDE: Visual Studio 2022 17.4.5
joseluisct