Обычно я использую Guid в качестве идентификатора, но в этом проекте я должен использовать идентификатор int, поэтому мой опыт здесь немного скуден.
Моя проблема в том, что мой автоинкрементный идентификатор int не получает значение OnAdd, которое я могу использовать для связанных элементов, прежде чем сохранять изменения.
Пример:
var box = new Box
{
Name = "Some name"
}
_dbContext.Add(box);
var boxItem = new BoxItem
{
BoxId = box.Id, // This will be 0 on save
Name = "Some other name"
}
_dbContext.Add(boxItem);
await _dbContext.SaveChangesAsync();
Когда я просматриваю свою базу данных после сохранения, boxItem.BoxId равен 0. При работе с Guid это сгенерированное значение Box.Id.
Модели:
public class Box
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
public IList<BoxItem> BoxItems { get; set; }
}
public class BoxItem
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int BoxId { get; set; }
public string Name { get; set; }
}
Столбец Id имеет спецификацию Identity/Identity = yes и приращение Identity = 1 в базе данных MSSQL.
Я не знаю, это ограничение при работе с int Id или у меня неправильная настройка?
_dbContext.Add(box);
не записывает данные в базу данных и не генерирует идентификатор.dbContext.SaveChangesAsync();
запишет данные и сгенерирует значение для ID автоинкремента. - person Chetan Ranpariya   schedule 18.06.2021SaveChanges
дважды, либо правильно сопоставить сущности в EF. stackoverflow.com/questions/6922690/ - person Chetan Ranpariya   schedule 18.06.2021