У вас есть , чтобы что-то сделать с этим нулевым ID
значением. Это бомба замедленного действия.
Вы всегда должны быть начеку, потому что это определенно ожидаемое поведение. EF имеет внутреннюю логику в зависимости от ключевых значений по умолчанию. В EF6 вы могли сделать это, потому что это было менее изысканным. (В этой области).
Позвольте мне показать вам, как оставление этого значения идентификатора может иметь неприятные последствия в будущем.
У вас есть этот MyType
объект,Давайте назовем это entity
, чтобы следовать некоторым соглашениям / привычкам именования. Его значение идентификатора - 0
, и оно не привязано к контексту.
Теперь предположим, что вы не используете этот довольно избыточный способ присоединить его как измененный, а новый способ EF-core:
context.Update(entity);
Теперь вы не увидите никаких исключений, но нет, проблема не устранена. Стало хуже. Состояние объекта entity
теперь равно Added
, и вы собираетесь добавить новую запись в вашу таблицу. Это может даже остаться незамеченным какое-то время, добавив к куче беспорядка, который вы должны будете убрать позже.
Если бы его значение ID
было > 0
, метод EF Update
сделал бы вывод, что это существующийобъект и его состояние должны быть Modified
.
Вы можете установить entity
состояние Modified
, если (1) оно не подключено и (2) вы используете .. .
context.Entry(entity).State = EntityState.Modified;
И это еще одна бомба замедленного действия. Более поздние изменения кода удаляют первое условие (оно не прикреплено) и бум.