Идентификационный столбец или свойство помечается как идентификационный столбец в определении LayoutViewModel
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public int Id { get; set; }
Таким образом, нет необходимости назначать его явно, так как он будет заполнен базой данных автоматически после вставки строки в таблицу макетов. , Пожалуйста, обновите ваше расположение макетов, как показано ниже, чтобы удалить присвоение идентификатора:
var layouts = new List<LayoutModel> {
new LayoutModel { /*Id = 1,*/ VenueId = 1, Description = "First layout" },
new LayoutModel { /*Id = 2, */ VenueId = 1, Description = "Second layout" }
};
// code smell
foreach(var layout in layouts)
{
context.Entry(layout).State = EntityState.Added;
}
_context.Layouts.AddRange(layouts);
_context.SaveChanges();
Также, пожалуйста, обновите вашу LayoutModel, как показано ниже:
public class LayoutModel
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
[Column(Order = 0)]
public int Id { get; set; }
[Key]
[Column(Order = 1)]
//[ForeignKey("Venue")]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int VenueId { get; set; }
//public virtual VenueModel Venue { get; set; } //Please correct Venue property type
}
Кроме того, проверьте, загружено ли место в _context. Макеты или нет.