如何使用 .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 会自动绑定它们。
我正在开发 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 会自动绑定它们。