【问题标题】:Update multiple entities in Entity Framework更新实体框架中的多个实体
【发布时间】:2017-08-18 18:07:15
【问题描述】:

我正在尝试更新两个表 SituationSituationCategory,但它没有像下面的代码和图像中提到的那样更新。

public async Task<bool> UpdateSituation(int id, SituationsDto data)
{
    Situations result = _mapper.Map<SituationsDto, Situations>(data);
    result.Deleted = true;

    _context.Entry(result).State = EntityState.Modified;
    await _context.SaveChangesAsync();

    SituationCategories situationCategory = new SituationCategories();

    if (result.SituationCategory != null)
    {
        if (situationCategory != null)
        {
            situationCategory.Description = result.SituationCategory.Description;
        }
    }

    await _context.SaveChangesAsync();
}

在这个屏幕截图中,我突出显示了应该更新的数据:

请回答

【问题讨论】:

    标签: entity-framework linq entity-framework-core multiple-tables


    【解决方案1】:

    EF 上下文对对象一无所知,除非您将给定对象附加到上下文,或者您最初从上下文中检索了对象。

    不仅仅是将实体标记为已修改:

    _context.Entry(result).State = EntityState.Modified;
    

    您需要调用 Update(),它开始跟踪实体并将其标记为已修改,因此,当您调用 SaveChanges() 时,更改将写入 DB:

    _context.Update(result);
    

    PS。我只会调用一次SaveChanges(),在这种情况下,在你的方法结束时。

    【讨论】:

    • 根据您的建议,它只更新一个实体。相关实体未更新
    • 您的Situation 实体是什么样的? _mapper.Map&lt;SituationsDto, Situations&gt;(data); 调用中是否设置了相关实体?
    • 这只是为了将传入对象映射到 dbcontext 属性以更新数据库表,但它只更新 Situation 表,我也想更新 Situation Categories 表
    • 您在上面的代码中所做的事情令人困惑。如果 Situation Category 与 Situation 有关系,您应该确保从您在 Situation 中使用的 DTO 在映射器中设置它。然后,像我的回答中提到的那样调用Update(),您应该也会看到 SituationCategory 的变化。
    • no SituationCategory 表在我们更新 Situation 表时没有影响
    猜你喜欢
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多