Как добавить несколько объектов во внешнюю таблицу с помощью Entity Framework

#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();
    }
}