2016-12-02 82 views
0

我得到一行与linq实体并修改它。但由于某种原因,SaveChanges()不会更新它。实体框架核心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并设置EntityStateModified

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

+0

“但是'SaveChanges()'不会因为某些原因更新它。”它有什么作用?如果您使用相同的上下文从数据库中提取对象的属性,则不必设置“EntityState.Modified”。 – krillgar

回答

2

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

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(); 
+2

这将分别保存每个实体。 SaveChanges可以/应该移到'foreach(...){...}之外' – Maarten

+0

@Maarten我承认我对Entity Framework非常陌生。如果保存被移到循环之外,那么在循环内更新会被要求吗? – Archer

+1

@Archer不,它不会。它维护任何意识到需要在数据库中进行更改的对象的内部状态。 – krillgar