如何在创建Job时同步生成关联的JobDates记录(1-1关联)
解决方案
由于Jobs与JobDates是1-1主键/外键关联,JobID需在Job插入数据库后自动生成,你可以通过以下两种方式实现创建Job时同步生成JobDates记录:
方式一:分两次保存(手动关联ID)
先保存Job获取自动生成的ID,再创建JobDates并关联该ID后保存:
public async Task<RedirectToPageResult> OnPost() { var Job = new Job() { JobNum = AddJobRequest.JobNum, CustomerId = AddJobRequest.CustomerId, JobName = AddJobRequest.JobName, JobDescription = AddJobRequest.JobDescription, JobType = AddJobRequest.JobType, JobStatusId = AddJobRequest.JobStatus, JobPM = AddJobRequest.JobPM, JobSM = AddJobRequest.JobSM, JobQty = AddJobRequest.JobQty }; _context.Jobs.Add(Job); // 第一次保存,生成Job的主键ID await _context.SaveChangesAsync(); // 创建关联的JobDates记录,绑定刚生成的JobID var jobDates = new JobDates() { JobID = Job.JobID, // 按需填充JobDates的其他业务字段,比如创建时间 CreatedDate = DateTime.Now }; _context.JobDates.Add(jobDates); // 第二次保存,插入JobDates记录 await _context.SaveChangesAsync(); CustomerList = await _context.Customers.ToListAsync(); return new RedirectToPageResult("/Index"); }
方式二:利用导航属性(单次保存)
如果实体类已配置导航属性(比如Job类包含public JobDates JobDates { get; set; },JobDates类包含public Job Job { get; set; }),可以直接关联两个实体,EF会自动处理主键关联,只需一次保存:
public async Task<RedirectToPageResult> OnPost() { // 先创建JobDates实例 var jobDates = new JobDates() { // 填充JobDates的业务字段 CreatedDate = DateTime.Now }; var Job = new Job() { JobNum = AddJobRequest.JobNum, CustomerId = AddJobRequest.CustomerId, JobName = AddJobRequest.JobName, JobDescription = AddJobRequest.JobDescription, JobType = AddJobRequest.JobType, JobStatusId = AddJobRequest.JobStatus, JobPM = AddJobRequest.JobPM, JobSM = AddJobRequest.JobSM, JobQty = AddJobRequest.JobQty, JobDates = jobDates // 通过导航属性关联两个实体 }; _context.Jobs.Add(Job); // 单次保存即可同时插入Job和JobDates,EF自动处理外键赋值 await _context.SaveChangesAsync(); CustomerList = await _context.Customers.ToListAsync(); return new RedirectToPageResult("/Index"); }
内容的提问来源于stack exchange,提问作者Matt Peveley
相关产品推荐
相关产品推荐

