【发布时间】:2021-09-14 21:49:41
【问题描述】:
我正在开发 Web Api CRUD 存储库模式,该模式使用具有主键和外键关系的多个表以及每个表,同时使用单独的 [HttpPost] 方法插入。但是如何在具有外键 Id 属性的子表中插入(发布)记录。
EmpVaccine详细型号:
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);
}
}
}
我在第一个表中添加了数据,但是在第二个表中插入时,我如何传递外键属性。请建议。谢谢
【问题讨论】:
-
你能显示意见吗?很难理解您要发布哪些数据。
-
您好,服务,没有查看页面。我正在 Postman 上进行测试。您可以看到模型属性,这就是我要发布的内容。
-
基本上:从数据库中获取并发布。目前尚不清楚是什么阻止您这样做,因为我们看不到发布对象的内容。
-
嗨,@GertArnold,在添加 [AddVaccineDetail] 时,我正在传递这个 Json 内容
{ "EmpVaccineDetailId":1, "VaccineType": "Test", "UniqueHealthId":"111", "BeneficiaryId":"222", "VaccinationStatus":"Fully Vaccinated", "DoYouWantToReportCovid": false }但是当我发布 [AddVaccineDose] 这个时,我将如何传递那个 'EmpVaccineDetailId' 属性外键关系。这就是我的困惑, -
发布
EmpVaccineDetailId并不比发布DateOfVaccine和其他属性更难。正如我所说:从数据库中获取值并发布它。
标签: c# entity-framework-core asp.net-core-webapi asp.net-core-5.0