#.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