2016-12-02 33 views
0

エンティティの行をlinqで取得して変更しています。しかしSaveChanges()はなんらかの理由で更新されません。Entity Frameworkコア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(); 

Iは、IsModified = trueとしてUpdate方法アップ、各プロパティを設定し、ModifiedEntityStateを設定しようとしています。

この問題については、本当に助けてください。

+0

"しかし、' SaveChanges() 'は何らかの理由でそれを更新しません。それは何をするためのものか?同じContextでデータベースから取得したオブジェクトのプロパティを変更する場合は、 '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

関連する問題