entity-framework - 一对可选的关系不更新 EF Core 上的主体实体
问题描述
我遇到这种情况。我有相关实体:Case and a Confinement
Case 有一个可选的导航到 confinement - ConfinementId,而 confinement 有一个必需的 CaseId。
我的问题是当我尝试通过附加限制记录来更新案例时,案例实体上的 confinementID 没有更新。
这是我的映射和实体类:
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。这个实现有什么问题吗。作为一种解决方法,我在数据库上创建了一个触发器,但我想在应用程序级别完成此操作。
解决方案
推荐阅读
- .htaccess - 基于 HTACCESS 中的用户代理重定向到桌面站点
- python - 在“,”上连接 3D 熊猫数组中的值,使其成为 2D 数组
- reactjs - 如何在 React JS 上访问 Spring Boot API
- javascript - 如果未设置会话,PHP 标头重定向不起作用
- c# - 如何点击键入按钮 C#
- python - 训练后测试一个 tensorflow cnn 模型
- javascript - 如何在 MapGuide Maestro 6.0 中启用查询小部件?
- html - 缓慢渲染的 Html 页面
- java - 类型实参是参数化类型时的子类型化
- excel - 按出现计数重复