After I upgraded to Asp.Net Core 3.0 I am getting the following error for my Identity class when attempting to create a user:
Unable to track an entity ‘User’ of type because primary key property
‘id’ is null.
Here User represents my extension of the Identity model.
This is the line of code where the error occurs:
var result = await _userManager.CreateAsync(user, password);
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
This is due to breaking changes in EF Core 3.0 which can be found under this link:
The problem can be solved by assigning a key manually like this:
// assign GUID to Id user.Id = Guid.NewGuid().ToString(); var result = await _userManager.CreateAsync(user, password);
Another solution would be the following according to Microsoft:
The pre-3.0 behavior can be obtained by explicitly specifying that the
key properties should use generated values if no other non-null value
is set. For example, with the fluent API:
modelBuilder
.Entity<Blog>()
.Property(e => e.Id)
.ValueGeneratedOnAdd();
Or with data annotations:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public string Id { get; set; }
Method 2
This solved the issue for me.
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
var keysProperties = builder.Model.GetEntityTypes().Select(x => x.FindPrimaryKey()).SelectMany(x => x.Properties);
foreach (var property in keysProperties)
{
property.ValueGenerated = ValueGenerated.OnAdd;
}
}
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0