Операция недопустима из-за текущего состояния объекта в C # Entity Framework - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть метод, который принимает форму отправки и ответы на вопросы.В целях сохранения представленных ответов в базу данных;Мне нужно установить ответы на отправку с идентификатором ссылки на отправку.

Я пытаюсь это сделать, но получаю сообщение об ошибке, указанное в заголовке: «Операция недопустима из-за текущего состояния объекта»и я не уверен почему.

Я пытался сохранить все в базе данных перед настройкой любых значений;но это, похоже, не помогает.Я получаю еще одну ошибку, сообщающую, что я пытаюсь удалить внешний ключ.

Я предполагаю, что это проблема контекста БД.

public FormSubmission AddSubmission(FormSubmission submission, List<FormSubmissionAnswer> submissionAnswers, int CustomerId, string CustomerName)
    {
        Form form = GetForm(submission.FormId.ToString());
        //set submission values
        submission.FormTitle = form.Title1;
        submission.DateSubmitted = DateTime.Now;
        if (CustomerId > 0)
            submission.PSMCustomerId = CustomerId;
        submission.CustomerName = CustomerName;
        base.SubscriptionDB.FormSubmissions.InsertOnSubmit(submission);
        base.SubscriptionDB.SubmitChanges();

        //need to update the submission answers FormSubmissionId            
        foreach (FormSubmissionAnswer answer in submissionAnswers)
            answer.FormSubmissionId = submission.Id; //erroring here

      base.SubscriptionDB.FormSubmissionAnswers.InsertAllOnSubmit(submissionAnswers);
        base.SubscriptionDB.SubmitChanges();

}

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

вместо

foreach (FormSubmissionAnswer answer in submissionAnswers)
            answer.FormSubmissionId = submission.Id; //erroring here

Попробуйте

foreach (FormSubmissionAnswer answer in submissionAnswers)
            submission.FormSubmissionAnswers.Add(answer);

В конце вызова base.SubscriptionDB.SubmitChanges ();

base.SubscriptionDB.FormSubmissions.InsertOnSubmit (представление);base.SubscriptionDB.SubmitChanges ();// Удалить из FormSubmission вместо использования только один раз.Это должно решить вашу проблему.

Ваш окончательный код должен быть таким, как показано ниже

Form form = GetForm(submission.FormId.ToString());
        //set submission values
        submission.FormTitle = form.Title1;
        submission.DateSubmitted = DateTime.Now;
        if (CustomerId > 0)
            submission.PSMCustomerId = CustomerId;
        submission.CustomerName = CustomerName;
        base.SubscriptionDB.FormSubmissions.InsertOnSubmit(submission);
        
        //need to update the submission answers FormSubmissionId            
        foreach (FormSubmissionAnswer answer in submissionAnswers)
            submission.FormSubmissionAnswers.Add(answer); 
   
        base.SubscriptionDB.SubmitChanges();

Я предполагаю, что у вас есть правильные отношения сущностей.

0 голосов
/ 07 февраля 2019

Как выглядят ваши сущности FormSubmission и FormSubmissionAnswer?Я предполагаю, что FormSubmission имеет какое-то свойство IEnumerable для представления отношений между ними.Попробуйте добавить объекты ответа в список перед выполнением первоначальной отправки изменений:

submission.CustomerName = CustomerName;
submission.FormSubmissionAnswers.AddRange(submissionAnswers);
base.SubscriptionDB.FormSubmissions.InsertOnSubmit(submission);
base.SubscriptionDB.SubmitChanges();

Я считаю, что EF должен автоматически генерировать PK и правильно назначать правильные FK.Тогда вам даже не нужно будет делать:

//need to update the submission answers FormSubmissionId            
foreach (FormSubmissionAnswer answer in submissionAnswers)
    answer.FormSubmissionId = submission.Id; //erroring here

base.SubscriptionDB.FormSubmissionAnswers.InsertAllOnSubmit(submissionAnswers);
base.SubscriptionDB.SubmitChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...