Я сталкиваюсь с этим сценарием.У меня есть связанные объекты: Дело и Конфайнмент
Кейс имеет дополнительную навигацию к заключению - ConfinementId, в то время как заключение имеет требуемый CaseId.
Моя проблема в том, что когда я пытаюсь обновить Case, прикрепив запись Confinement, confinementID для объекта case не обновляется.
Вот мои классы отображения и сущности:
public class Confinement : Entity
{
public int Id { get; set; }
public string ReferenceId { get; set; }
public int CaseId { get; set; }
public DateTime StartDate { get; set; }
public DateTime? EndDate { get; set; }
public bool IsActive { get; set; }
public int BranchId { get; set; }
public string Status { get; set; }
public virtual Case Case {get;set;}
}
public class Case : Entity
{
public int CaseId { get; set; }
public string CaseReferenceId { get; set; }
public int? ConsultationId { get; set; }
public int? ConfinementId { get; set; }
public virtual Confinement Confinement { get; set; }
****Omitted
}
Конфигурация
public void Configure(EntityTypeBuilder<Case> builder)
{
builder.HasKey(c => c.CaseId);
builder.HasMany(t => t.Details)
.WithOne(t => t.Case)
.HasForeignKey(t => t.CaseId);
builder.HasOne(t => t.Confinement)
.WithOne(a=>a.Case)
.HasForeignKey<Confinement>(t => t.CaseId);
}
public void Configure(EntityTypeBuilder<Confinement> builder)
{
builder.HasKey(c => c.Id);
builder.HasOne(a => a.Case)
.WithOne(a => a.Confinement)
.HasForeignKey<Confinement>(a => a.CaseId);
}
Код контроллера
public async Task<IActionResult> AddConfinement(int caseId)
{
if (caseId == 0)
return BadRequest();
if (_service.ExistingCase(caseId))
return BadRequest("Case has already a confinement record!");
var @case = await _caseService.FindAsync(caseId);
if (@case == null)
return NotFound("Case not found!");
var confinement = _converter.ConvertFromCase(@case);
confinement.ObjectState = ObjectState.Added;
@case.Confinement = confinement;
@case.ObjectState = ObjectState.Modified;
@case.ConfinementId = confinement.Id;
_caseService.Update(@case);
await _unitOfWork.SaveChangesAsync();
return Ok();
}
Когда вызывается метод AddConfinement, ограничение добавляется в базу данных,но Case.ConfinementId не обновляется.Есть ли что-то не так в этой реализации.В качестве обходного пути я создал триггер в базе данных, но я хочу сделать это на уровне приложения.