Asp.net-Core
UserManager 引發異常 - 無法跟踪實體,因為主鍵屬性“Id”為空 - 從 .Net Core 2.2 升級到 3.0 後
我使用了
User源自IdentityUserusing的自定義實現Asp.Net Core Identity:public class AppUser : IdentityUser { ... }如果我呼叫該方法:
var identityResult = await UserManager.CreateAsync(user);我得到錯誤:
System.InvalidOperationException:無法跟踪“AppUser”類型的實體,因為主鍵屬性“Id”為空。
它與
Microsoft.AspNetCore.Identity.EntityFrameworkCore-版本完美配合2.2.0,但升級到3.0.0- 後它不起作用。在測試使用者創建過程中我也遇到了同樣的錯誤,我使用以下
UserManager配置:
EF Core 3.0 引入了重大更改字元串和字節數組鍵預設情況下不是客戶端生成的,這會影響使用
stringPK的實體,IdentityUser<string>並且IdentityRole<string>如果未明確設置 PK,則會導致該異常。但是,還修改了預設值
IdentityUser和類以使用內部類建構子填充屬性。所以通常你不應該有這個問題,除非某些程式碼明確設置to 。無論如何,您可以使用連結中的建議切換到舊行為IdentityRole``Id``Guid.NewGuid().ToString()``Id``null緩解措施
如果沒有設置其他非空值,則可以通過顯式指定鍵屬性應使用生成的值來獲得 3.0 之前的行為。
OnModelCreating例如,在呼叫基本實現之後,在上下文覆蓋中:modelBuilder.Entity<AppUser>() .Property(e => e.Id) .ValueGeneratedOnAdd();