Здравствуйте и заблаговременно за то, что вы нашли время, чтобы прочитать это сообщение. Я новичок в EF Core, и я пытаюсь настроить следующее соединение с базой данных, где у меня есть подсистемные контроллеры из моделей.SqlException: инструкция INSERT противоречила ограничениям FOREIGN KEY
namespace VotingWebApp.Models
{
public class QuestionObject
{
public int QuestionObjectID { get; set; }
public string Question { get; set; }
public string AnswerA { get; set; }
public string AnswerB { get; set; }
public int AnswerAVote { get; set; }
public int AnswerBVote { get; set; }
public int GroupItemID { get; set; }
public ICollection<ResponseItem> ResponseItems { get; set; }
public GroupItem GroupItem { get; set; }
}
}
namespace VotingWebApp.Models
{
public class GroupItem
{
public int GroupItemID { get; set; }
public string GroupName { get; set; }
public int MemberCount { get; set; }
public int Host { get; set; }
public ICollection<GroupUserLink> GroupUserLinks { get; set; }
public ICollection<QuestionObject> QuestionItems { get; set; }
}
}
я получаю следующее сообщение об ошибке при попытке создать новый QuestionObject в базе данных (Даже когда я поставить существующий ключ GroupItem).
SqlException: Инструкция INSERT заявление противоречит ограничение внешнего ключа "FK_QuestionObject_GroupItem_GroupItemID". Конфликт произошел в базе данных «aspnet-VotingWebApp-02945df4-961a-4b8f-8999-19aa61dfd02e», таблица «dbo.GroupItem», столбец «GroupItemID».
Я не уверен, как решить этот конфликт. Я прочитал другие сообщения, и они в основном показывают, как человек не снабжает существующий ключ. Я новичок в EF Core, поэтому любая помощь будет оценена.
// GET: QuestionObjects/Create
public async Task<IActionResult> CreateQuestion(int? id)
{
if (id == null)
{
return NotFound();
}
var groupItem = await _context.GroupItem.SingleOrDefaultAsync(m => m.GroupItemID == id);
if (groupItem == null)
{
return NotFound();
}
QuestionObject questionObject = new QuestionObject();
questionObject.GroupItemID = groupItem.GroupItemID;
return View(questionObject);
}
// POST: QuestionObjects/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> CreateQuestion([Bind("AnswerA,AnswerAVote,AnswerB,AnswerBVote,GroupID,Question")] QuestionObject questionObject)
{
if (ModelState.IsValid)
{
_context.Add(questionObject);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(questionObject);
}
Я добавил код для ввода. Это находится в контроллере GroupItem.
Показать код вставки. –
Ответ, вероятно, заключается в том, как вы поставляете существующий ключ GroupItem. Как вы это делаете? –
Попробуйте '_context.QuestionObjects.Add (questionObject);' –