从.Net Core 2.2升级到3.0后,UserManager引发异常-由于主键属性'Id'为空,因此无法跟踪实体

我使用了User的自定义实现,该实现是使用IdentityUser衍生自Asp.Net Core Identity的:

public class AppUser : IdentityUser
    {
        ...
    }

如果我调用该方法:

var identityResult = await UserManager.CreateAsync(user);

我得到了错误:

  

System.InvalidOperationException:由于主键属性“ Id”为空,因此无法跟踪类型为“ AppUser”的实体。

它与microsoft.AspNetCore.Identity.EntityFrameworkCore-2.2.0的版本完美兼容,但是升级到3.0.0之后-它不起作用。

在测试用户创建过程中,我也遇到了相同的错误,在这里我使用以下UserManager配置:

https://github.com/aspnet/AspNetCore/blob/c95ee2b051814b787b07f55ff224d03d550aafeb/src/Identity/test/Shared/MockHelpers.cs#L37

pingguwenjun 回答:从.Net Core 2.2升级到3.0后,UserManager引发异常-由于主键属性'Id'为空,因此无法跟踪实体

有EF Core 3.0引入的突破性更改String and byte array keys are not client-generated by default会影响使用stringIdentityUser<string>之类的使用IdentityRole<string> PK的实体,如果未设置PK,则会导致该异常明确地。

但是,默认的IdentityUserIdentityRole类也被修改为在类构造函数中用Id填充Guid.NewGuid().ToString()属性。因此,通常,除非某些代码将Id显式设置为null,否则您就不会遇到该问题。无论如何,您可以使用链接中的建议来切换到旧的行为

  

缓解措施

     

如果未设置其他非空值,则可以通过明确指定键属性应使用生成的值来获得3.0之前的行为。

例如调用基本实现后,内部上下文OnModelCreating会被覆盖:

modelBuilder.Entity<AppUser>()
    .Property(e => e.Id)
    .ValueGeneratedOnAdd();
本文链接:https://www.f2er.com/3152405.html

大家都在问