Jen*_*nan 8 entity-framework-core asp.net-core asp.net-core-identity
我使用了User从IdentityUserusing派生的自定义实现Asp.Net Core Identity:
public class AppUser : IdentityUser
{
...
}
Run Code Online (Sandbox Code Playgroud)
如果我调用该方法:
var identityResult = await UserManager.CreateAsync(user);
Run Code Online (Sandbox Code Playgroud)
我收到错误:
System.InvalidOperationException:无法跟踪“AppUser”类型的实体,因为主键属性“Id”为空。
它的工作原理完全符合的版本Microsoft.AspNetCore.Identity.EntityFrameworkCore- 2.2.0,但升级后3.0.0-这是行不通的。
我在测试用户创建过程中也遇到同样的错误,我使用以下UserManager配置:
Iva*_*oev 21
有EF核心3.0引入了重大更改字符串和字节数组键没有客户端生成的默认情况下它会影响其使用实体stringPK喜欢IdentityUser<string>和IdentityRole<string>和将导致异常,如果PK未明确设置。
然而,默认IdentityUser和IdentityRole类也被修改为Id使用Guid.NewGuid().ToString()内部类构造函数填充属性。所以通常你不应该有这个问题,除非某些代码明确设置了Idto null。无论如何,您可以使用链接中的建议切换到旧行为
缓解措施
3.0 之前的行为可以通过明确指定如果没有设置其他非空值,键属性应该使用生成的值来获得。
例如OnModelCreating,在调用基本实现之后,内部上下文覆盖:
modelBuilder.Entity<AppUser>()
.Property(e => e.Id)
.ValueGeneratedOnAdd();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2665 次 |
| 最近记录: |