Оставьте идентификатор пустым при сохранении записи в EFCore / Автоматическое создание идентификатора

#.net #entity-framework-core #ef-core-3.1

Вопрос:

Я хочу создать новую запись в своей базе данных на основе модели.

Когда я автоматически сопоставляю свой dto с фактической моделью базы данных, свойство id становится: 0. В базе данных уже есть запись с идентификатором 0. Как я могу игнорировать значение идентификатора и автоматически генерировать идентификатор для базы данных?

 public async Tasklt;WikiDetailDtogt; AddWiki(WikiDetailDto wikiDetailDto)  {  WikiPage newPage;  newPage = mapper.Maplt;WikiPagegt;(wikiDetailDto);  newPage.CategoryId = wikiDetailDto.Category.Id;  await _context.AddAsync(newPage);  await _context.SaveChangesAsync();  return wikiDetailDto;  }  

Ответ №1:

Ну, прежде всего, вам нужно аннотировать Id свойство в модели базы данных с помощью атрибута или конфигурации модели fluent.

 modelBuilder.Entitylt;TEntitygt;()  .HasKey(entity =gt; entity.Id);  

или

 [Key] public int Id { get; set; }  

Насколько я помню, EF может автоматически идентифицировать свойство по шаблону типа Id или SmthId , но не уверен. Затем вы просто передаете 0 в качестве значения свойства Id (по умолчанию int равно 0), и после вызова DbContext.SaveChanges() свойство Id будет сгенерировано и сохранено в свойстве.

Комментарии:

1. Идентификатор рассматривается как первичный ключ без аннотаций, но когда id = 0, я получу ошибку, потому что 0 уже существует в базе данных, когда я устанавливаю его на 1000 вручную, он сохраняется.

2. Используете ли вы подход code first с нуля? Я имею в виду, что у вас есть миграции и вы применяете все изменения модели с помощью миграции?

3. Это первый проект по созданию базы данных. Я автоматически сгенерировал модели и DbContext через PMC