Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 是否可以使用相同的_context.SaveChangesAsync()添加父记录和子记录_Asp.net Core_Entity Framework Core_Asp.net Core Mvc - Fatal编程技术网

Asp.net core 是否可以使用相同的_context.SaveChangesAsync()添加父记录和子记录

Asp.net core 是否可以使用相同的_context.SaveChangesAsync()添加父记录和子记录,asp.net-core,entity-framework-core,asp.net-core-mvc,Asp.net Core,Entity Framework Core,Asp.net Core Mvc,我有以下两个父/子对象:- public Submission() { SubmissionQuestionSubmission = new HashSet<SubmissionQuestionSubmission>(); } public int Id { get; set; } public string FirstName { get; set; } public str

我有以下两个父/子对象:-

 public Submission()
        {
            SubmissionQuestionSubmission = new HashSet<SubmissionQuestionSubmission>();
        }

        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Npi { get; set; }
        public bool Independent { get; set; }
        public string Comment { get; set; }

        public virtual ICollection<SubmissionQuestionSubmission> SubmissionQuestionSubmission { get; set; }
    }


public partial class SubmissionQuestionSubmission
    {
        public int SubmissionQuestionId { get; set; }
        public int SubmissionId { get; set; }
        public string Answer { get; set; }

        public virtual Submission Submission { get; set; }
    }
我创建了以下视图模型:-

 public class SubmissionCreate
    {
        public Submission Submission {set; get;}
        public IList<SubmissionQuestion> SubmissionQuestion { set; get; }

        public IList<SubmissionQuestionSubmission> SubmissionQuestionSubmission { set; get; }

    }
如果我有以下操作方法来添加父记录提交和子记录提交QuestionSubmission,但要这样做,我必须向数据库发出2个保存请求,一个保存父记录并获取其ID,另一个保存子记录并为其分配父ID,如下所示:-

public async Task<IActionResult> Create(SubmissionCreate sc)//Bind("Id,FirstName,LastName,Npi,Independent,Comment")]
        {
            if (ModelState.IsValid)
            {
              var newsubmission  =  _context.Submission.Add(sc.Submission);
                await _context.SaveChangesAsync();
                foreach (var v in sc.SubmissionQuestionSubmission)
                {

                    v.SubmissionId = sc.Submission.Id;
                    _context.SubmissionQuestionSubmission.Add(v);
                        }
                await _context.SaveChangesAsync();
                TempData["message"] = "Thank You.. Your request has been submitted...";
                return View("Confirmation");
            }
            return View(sc);
        }
所以我的问题是,我是否可以使用一个save语句而不是两个save语句来完成上述工作?

您不需要使用两个SaveChanges。您可以将newsubmission分配到Submission属性,而不是v.SubmissionId=sc.Submission.Id

在这种情况下,Id和ForeignKey由EF Core自动创建

var newsubmission=_context.Submission.Addsc.Submission; sc.SubmissionQuestionSubmission中的foreach var v { v、 提交=新提交; _context.SubmissionQuestionSubmission.Addv; } wait_context.SaveChangesAsync; 另一种方式

sc.Submission.SubmissionQuestionSubmission=新列表; sc.SubmissionQuestionSubmission中的foreach var v { sc.Submission.SubmissionQuestionSubmission.Addv } _context.Submission.Addsc.Submission; wait_context.SaveChangesAsync;