Это действительно работает, но я понятия не имею, зачем это нужно. Это единственная таблица в моем приложении, которая, кажется, хочет этого.
Должен ли я добавить это во все мои беглые определения сейчас?
Это необходимо только для столбцов идентификации, которые не первичный ключ (PK) таблицы (или Key
в EF Core).
Что должно быть редко - вот почему у вас проблема только с этой таблицей.
Но действительно ли вам нужен составной ПК (и какова цель столбца идентификации)? Обратите внимание, что как и для любых активных вызовов, выигрывает последний HasKey
(свободный интерфейс EF Core API для определения PK), т.е. здесь
b.HasKey(e => e.OrderStatusId);
b.HasKey(e => new { e.CompanyId, e.OrderId }); //CompositeKey
строка
b.HasKey(e => e.OrderStatusId);
не имеет эффекта Таким образом, по умолчанию имеет право на обновление. Но тогда почему он здесь? Может быть, было намерение иметь идентификационный номер PK и составной альтернативный ключ ? Другими словами, если конфигурация была
b.HasKey(e => e.OrderStatusId);
b.HasAlternateKey(e => new { e.CompanyId, e.OrderId }); //CompositeKey
, то у вас не будет такой проблемы и вам не нужно будет настраивать AfterSaveBehavior
.
И если вы действительно хотите составной ПК , затем удалите вводящую в заблуждение строку
b.HasKey(e => e.OrderStatusId);
и используйте решение SetAfterSaveBehavior
.