Я действительно не могу понять это.Я постоянно сталкиваюсь с этой ошибкой, и я не уверен, как изменить код для поддержки 1 для многих.Приведенные мною примеры довольно сложны для понимания.Некоторые предлагают изменить свободный API или модель или даже контроллер.
Ошибка:
SqlException: невозможно вставить явное значение для столбца идентификаторов в таблице 'CompetitionCategory', когда для IDENTITY_INSERT установлено значение OFF.
System.Data.SqlClient.SqlCommand + <> c.b__122_0 (результат задачи)
DbUpdateException: при обновлении записей произошла ошибка.Подробности см. Во внутреннем исключении.
Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.ExecuteAsync (соединение IRelationalConnection, CancellationToken cancellationToken)
Competition
класс модели:
public class Competition
{
[Key]
public int ID { get; set; }
[Required]
[Display(Name = "Competition Name")]
public string CompetitionName { get; set; }
[Required]
public string Status { get; set; }
public ICollection<CompetitionCategory> CompetitionCategories { get; set; }
}
CompetitionCategory
класс модели:
public class CompetitionCategory
{
[Key]
public int ID { get; set; }
[Required]
[Display(Name = "Category Name")]
public string CategoryName { get; set; }
[ForeignKey("CompetitionID")]
public int CompetitionID { get; set; }
}
После некоторой обработки я понял, что для передачи списка контроллеру мне следует использовать модель представления, как показано здесь:
public class CategoriesViewModelIEnumerable
{
public Competition competition { get; set; }
public CompetitionCategory competitionCategory { get; set; }
// From Microsoft
public IEnumerable<string> SelectedCategories { get; set; }
public List<SelectListItem> CategoriesList { get; } = new List<SelectListItem>
{
new SelectListItem { Value = "xxx", Text = "xxx" },
new SelectListItem { Value = "yyy", Text = "yyy" },
new SelectListItem { Value = "zzz", Text = "zzz" },
};
}
Я могу успешно передать данные на мой контроллер и прочитать / распечатать их на консоли.Однако я нажимаю на последнюю ошибку, которая заключается в сохранении 2-й категории и далее в базе данных, возможно, из-за некоторых ограничений первичного ключа / внешнего ключа.
В настоящее время я могу сохранить только первый элемент в списке в базе данных.
public async Task<IActionResult> Create(CategoriesViewModelIEnumerable model)
{
if (ModelState.IsValid)
{
CompetitionCategory competitionCategory = new CompetitionCategory();
_context.Add(model.competition);
await _context.SaveChangesAsync();
foreach (var CategoryName in model.SelectedCategories)
{
competitionCategory.CategoryName = CategoryName;
competitionCategory.CompetitionID = model.competition.ID;
_context.Add(competitionCategory);
await _context.SaveChangesAsync();
}
await _context.SaveChangesAsync();
}
}
Благодарим Вас за помощь!:)