更新EF core 2.0中的相关记录

时间:2018-04-03 17:04:51

标签: asp.net-core-mvc entity-framework-core

我正在尝试更新记录及其相关实体,但我很难找到一种可行的方式。

我有一个实体存储有关校长及其种族血统的信息。种族起源实体是一个简单的查找表。

当我尝试更新记录而没有任何具体内容时,它不会更新种族来源,或者如果我特意尝试更新它,则会因此错误消息而失败...

“实体类型'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;
        }
    }

0 个答案:

没有答案