Unable to track an entity of type because primary key property 'id' is null
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;
}
}
This is due to breaking changes in EF Core 3.0 which can be found under this link:
https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-3.0/breaking-changes#string-and-byte-array-keys-are-not-client-generated-by-default
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; }