#c# #asp.net #sql-server #asp.net-mvc #entity-framework
#c# #asp.net #sql-сервер #asp.net-mvc #entity-framework
Вопрос:
Я новичок в Entity Framework. У меня есть две таблицы с именами Polls
и Candidates
, которые имеют отношение «один ко многим».
Я хочу добавить несколько кандидатов в опрос.
Это мой код:
public bool InsertPolls(PollModel _polls)
{
polls = new Poll();
candidates = new candidate();
polls.Name = _polls.name;
polls.startDate = startDate;
polls.endDate = endDate;
polls.Type = _polls.pollType;
foreach (var candidatesID in _polls.candidateID)
{
candidates.Person_ID = candidatesID;
candidates.Poll = polls;
_dbContext.candidates.Add(candidates);
_dbContext.SaveChanges();
}
}
Но это вызывает исключение
Исключение типа ‘System.В EntityFramework произошло исключение InvalidOperationException.dll, но не была обработана в пользовательском коде Дополнительная информация: Свойство ‘Person_ID’ является частью ключевой информации объекта и не может быть изменено.
Кто-нибудь может мне помочь с этим? Спасибо!
Комментарии:
1. Вы используете Code First или DB First?
2. сначала я использую DB
3. В какой строке вы получаете исключение?
4. ХОРОШО, можете ли вы предоставить свою схему базы данных из EF?
5. Пожалуйста, предоставьте полное сообщение об исключении, включая также любые возможные
InnerException
сообщения!
Ответ №1:
для устранения этой проблемы поместите в первую строку текущего кода цикла for
candidates = new candidate();
также удалите candidates = new candidate(); из верхней части кода.
текущий код в цикле также удаляется
candidates.Poll = polls;
потому что вы добавили в начало кода.
это окончательный код
public bool InsertPolls(PollModel _polls)
{
polls = new Poll();
polls.Name = _polls.name;
polls.startDate = startDate;
polls.endDate = endDate;
polls.Type = _polls.pollType;
_dbContext.Polls.Add(polls);
_dbContext.SaveChanges();
foreach (var candidatesID in _polls.candidateID)
{
candidates = new candidate();
candidates.Person_ID = candidatesID;
_dbContext.candidates.Add(candidates);
_dbContext.SaveChanges();
}
}