如何使用 .Net core web Api 和 EF core 在具有外键关系的数据库中添加记录

How to Add records in DB with foreign key relatationship using .Net core web Api and EF core

我正在开发 Web Api CRUD 存储库模式,使用具有主键和外键关系的多个 table 以及每个 table,同时使用单独的 [HttpPost] 方法插入。但是如何使用外键 ID 属性.

插入(post)子 table 中的记录

EmpVaccineDetail 型号:

    public partial class EmpVaccineDetail
    {
    public EmpVaccineDetail()
    {
        CovidInfectionDetails = new HashSet<CovidInfectionDetail>();
        VaccineDoses = new HashSet<VaccineDose>();
    }

    public int EmpVaccineDetailId { get; set; }
    public string VaccineType { get; set; }
    public int UniqueHealthId { get; set; }
    public int BeneficiaryId { get; set; }
    public string VaccinationStatus { get; set; }
    public bool DoYouWantToReportCovid { get; set; }

    public virtual ICollection<CovidInfectionDetail> CovidInfectionDetails { get; set; }
    public virtual ICollection<VaccineDose> VaccineDoses { get; set; }
}

疫苗剂量型号:

    public partial class VaccineDose
    {
    public int VaccineDoseId { get; set; }
    public DateTime DateOfVaccine { get; set; }
    public string VaccineOrganizedBy { get; set; }
    public bool? Reimbursed { get; set; }
    public Guid? CoWinCertificateUploadFileId { get; set; }
    public string HospitalName { get; set; }
    public Guid? ReceiptUploadFileId { get; set; }
    public string VaccineDoseType { get; set; }
    [ForeignKey]
    public int EmpVaccineDetailId { get; set; }

    public virtual EmpVaccineDetail EmpVaccineDetail { get; set; }
}

VaccineDetailsRepository :

    public class VaccineDetailsRepository : IVaccineDetails
   {
    private readonly PeopleWorksContext _peopleWorksContext;
    public VaccineDetailsRepository(PeopleWorksContext peopleWorksContext)
    {
        _peopleWorksContext = peopleWorksContext;
    }

    public async Task<EmpVaccineDetail> Add(EmpVaccineDetail empVaccineDetail)
    {
        await _peopleWorksContext.EmpVaccineDetails.AddAsync(empVaccineDetail);
        await _peopleWorksContext.SaveChangesAsync();
        return empVaccineDetail;
    }
   }

疫苗剂量存储库:

    public class VaccineDosesRepository : IVaccineDoses
{
    private readonly PeopleWorksContext _peopleWorksContext;
    public VaccineDosesRepository(PeopleWorksContext peopleWorksContext)
    {
        _peopleWorksContext = peopleWorksContext;
    }
    public async Task<VaccineDose> Add(VaccineDose vaccineDose)
    {
        await _peopleWorksContext.VaccineDoses.AddAsync(vaccineDose);
        await _peopleWorksContext.SaveChangesAsync();
        return vaccineDose;
    }
}

控制器:

    public class VaccineDetailsController : ControllerBase
    {
    private readonly IVaccineDetails _vaccineDetails;
    private readonly IVaccineDoses _vaccineDoses;
    public VaccineDetailsController(IVaccineDetails vaccineDetails, IVaccineDoses 
    vaccineDoses)
    {
        _vaccineDetails = vaccineDetails;
        _vaccineDoses = vaccineDoses;
    }

    [HttpPost]
    [Route("VaccineDetails/AddVaccineDetail")]
    public async Task<IActionResult> AddVaccineDetail(EmpVaccineDetail empVaccineDetail)
    {
        try
        {
            await _vaccineDetails.Add(empVaccineDetail);
            return Ok();
        }
        catch (Exception ex)
        {
            return StatusCode(StatusCodes.Status500InternalServerError, ex);
        }
    }

    [HttpPost]
    [Route("VaccineDetails/AddVaccineDose")]
    public async Task<IActionResult> AddVaccineDose(VaccineDose vaccineDose)
    {
        try
        {
            await _vaccineDoses.Add(vaccineDose);
            return Ok();
        }
        catch (Exception ex)
        {
            return StatusCode(StatusCodes.Status500InternalServerError, ex);
        }
    }
   }

我在第一个 table 中添加了数据,但是在第二个 table 中插入时,我如何传递外键 属性。请建议。谢谢

点击此 VaccineDetails/AddVaccineDose url 只需通过 json.

传递 EmpVaccineDetailId
{
    "DateOfVaccine ": "2021-05-25 00:52:29.5086347",
    .............
     ............
    "EmpVaccineDetailId ":1
}

确保您有 EmpVaccineDetailId = 1 的 EmpVaccineDetail 数据。VaccineDose 和 EmpVaccineDetail 之间的关系是一对多的,EF Core 会自动绑定它们。