В EF Core 3.0 введено критическое изменение Ключи строк и байтового массива по умолчанию не генерируются клиентом , что влияет на объекты, использующие string
PK, такие как IdentityUser<string>
и IdentityRole<string>
, и приводит к тому, чтоисключение, если PK не установлен явно.
Однако классы IdentityUser
и IdentityRole
по умолчанию также были изменены, чтобы заполнить свойство Id
Guid.NewGuid().ToString()
внутри конструкторов классов. Поэтому обычно у вас не должно быть этой проблемы, кроме случаев, когда какой-то код явно устанавливает Id
в null
. В любом случае, вы можете переключиться на старое поведение, используя предложение по ссылке
Смягчения
Поведение до версии 3.0 можно получить, явно указав, чтоключевые свойства должны использовать сгенерированные значения, если не установлено другое ненулевое значение.
например, внутри контекста OnModelCreating
переопределение, после вызова базовой реализации:
modelBuilder.Entity<AppUser>()
.Property(e => e.Id)
.ValueGeneratedOnAdd();