【问题标题】:Entity Framework Core SaveChanges doesn't update records实体框架核心 SaveChanges 不更新记录
【发布时间】:2016-12-02 21:15:14
【问题描述】:

我正在使用 linq 获取一行实体并对其进行修改。但是SaveChanges()由于某种原因没有更新它。

foreach(Kontraktdto k in Kontrakt)
{
    var kontrakt = context.LkKontrakter.FirstOrDefault(x => x.KontraktId == k.KontraktId);

    if (kontrakt == null) 
        continue;

    var entry = context.Entry(kontrakt);
    entry.State = EntityState.Modified;

    kontrakt.OpsjonBetingelse = k.OpsjonBetingelse;
    kontrakt.OpsjonVarslingsdato = k.OpsjonVarslingdato;
    kontrakt.Opsjon = (double)k.Opsjon;

    entry.Property(e => e.OpsjonVarslingsdato).IsModified = true;
    entry.Property(e => e.OpsjonBetingelse).IsModified = true;
    entry.Property(e => e.Opsjon).IsModified = true;

    context.LkKontrakter.Update(kontrakt);
}

context.SaveChanges();

我尝试设置Update 方法,每个属性为IsModified = true,并将EntityState 设置为Modified

我真的很想在这个问题上得到一些帮助。

【问题讨论】:

  • "但是SaveChanges() 出于某种原因没有更新它。"它有什么作用?如果您要更改从具有相同上下文的数据库中提取的对象的属性,则不必设置 EntityState.Modified

标签: c# entity-framework linq


【解决方案1】:

我看到很多不必要的代码。试试这个...

foreach(Kontraktdto k in Kontrakt)
{
    var kontrakt = context.LkKontrakter.FirstOrDefault(x => x.KontraktId == k.KontraktId);

    if (kontrakt == null) 
    {
        continue;
    }

    kontrakt.OpsjonBetingelse = k.OpsjonBetingelse;
    kontrakt.OpsjonVarslingsdato = k.OpsjonVarslingdato;
    kontrakt.Opsjon = (double)k.Opsjon;
}

context.SaveChanges();

【讨论】:

  • 这将分别保存每个实体。 SaveChanges 可以/应该移出foreach (...) { ... }
  • @Maarten 我承认我对实体框架很陌生。如果将保存移到循环外,是否需要在循环内进行更新?
  • @Archer 不,不会。它维护它知道需要在数据库中更改的任何对象的内部状态。
  • @Archer 否。实体实例由上下文跟踪,因此不需要更新。
  • 谢谢大家。在这种情况下,我已经更新了答案。我有点利用别人的问题来强迫自己学习更多,所以我很感激你的帮助:)
猜你喜欢
  • 2020-10-15
  • 2021-09-21
  • 2021-11-15
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 2018-05-19
相关资源
最近更新 更多