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;