我正在尝试更新记录及其相关实体,但我很难找到一种可行的方式。
我有一个实体存储有关校长及其种族血统的信息。种族起源实体是一个简单的查找表。
当我尝试更新记录而没有任何具体内容时,它不会更新种族来源,或者如果我特意尝试更新它,则会因此错误消息而失败...
“实体类型'EthnicOrigin'上的属性'Id'是密钥的一部分,因此无法修改或标记为已修改。要使用标识外键更改现有实体的主体,请首先删除依赖项并调用'然后SaveChanges'将依赖关系与新主体关联。“
但是,我无法删除依赖项,因为它是我需要更新的记录。
这是代码..
public bool UpdateGovernor(Governor updatedGovernor, User user)
{
try
{
Governor myGovernor = _ctx.Governors
.Where(u => u.Id == updatedGovernor.Id)
.Include(i => i.EthnicOrigin)
.Include(u => u.Tenant)
.FirstOrDefault();
if (myGovernor.Tenant.Id == user.Tenant.Id)
{
_ctx.Entry(myGovernor).CurrentValues.SetValues(updatedGovernor);
_ctx.Entry(myGovernor).State = EntityState.Modified;
_ctx.Entry(myGovernor.EthnicOrigin).CurrentValues.SetValues(updatedGovernor.EthnicOrigin);
return true;
}
else
{
string error = "Tenant breach" + Environment.NewLine;
error += "User :" + user.emailAddress.ToString() + Environment.NewLine;
error += "Updated Governor :" + updatedGovernor.Id.ToString() + Environment.NewLine;
_logger.LogError($"Failed to update governor: {error}");
return false;
}
}
catch (Exception ex)
{
_logger.LogError($"Failed to update governor: {ex}");
return false;
}
}