2016-05-27 5 views
1

I Verwenden Sie diesen Code für die Aktualisierung eines Feld in meiner Tabelle. (Mit Entity Framework 6.1.3)EntityState.Modified arbeitet nicht in Entity-Code Erste

var model = new MyTable { Id = Id, UpdateTime = DateTime.UtcNow }; 
var dbSet = this.dbContext.Set<MyTable>(); 
dbSet.Attach(model);     
entry = this.dbContext.Entry(model); 
entry.State = EntityState.Modified; 
this.dbContext.SaveChanges(); 

aber nicht funktionieren und Update nicht change.and wenn ich Code dies zu ändern:

var model = this.dbContext.Set<MyTable>().Find(id); 
model = new MyTable { Id = Id, UpdateTime = DateTime.UtcNow }; 
var dbSet = this.dbContext.Set<MyTable>();    
entry = this.dbContext.Entry(model); 
entry.State = EntityState.Modified; 
this.dbContext.SaveChanges(); 

fand ich, dass in meinem ersten Code, EF Blick auf Update Feld, das nicht ändern, aber ist dies der richtige, wenn ich schreibe:

entry.State = EntityState.Modified; 

ef muss Update-Code generieren, warum nicht? Wie muss ich tun, um dieses Problem zu lösen?

+0

Ich bin nicht sicher, aber ich denke, dass es sein könnte, weil der Eintrag() -Aufruf Sie ein DbEntityEntry bekommt, während die DbSet ein IQueryable ist , so Der zurückgegebene Eintrag ist nicht länger Teil des Kontexts. – DevilSuichiro

+0

no.it isnit.in DbSet Zusammenfassung geschrieben: Gibt eine System.Data.Entity.DbSet'1 Instanz für den Zugriff auf Entitäten des angegebenen Typs im Kontext und dem zugrunde liegenden Speicher zurück. Beachten Sie, dass Entity Framework erfordert, dass diese Methode die gleiche Instanz jedes Mal zurückgibt, wenn sie für eine bestimmte Kontextinstanz und einen bestimmten Entitätstyp aufgerufen wird. und dies kann Test mit Änderung dbSet-Variable mit this.dbContext.Set (); und das Ergebnis ist das gleiche wie zuvor. –

+0

ist jedoch genau dieser Eintrag derjenige, der an den Kontext angehängt ist? Da bin ich mir nicht sicher. – DevilSuichiro

Antwort

0

Endlich fand ich, was ist das Problem? Ich habe ein erforderliches String-Feld in meiner Tabelle, und ich fand, dass wir Referenz-Typ-Dateien im Entity-Framework füllen müssen, und es kann nicht leer oder Leerzeichen sein, aber nicht den richtigen Wert, und in diesem Zustand müssen wir t verwenden Sie entry.State = EntityState.Modified; und stattdessen müssen wir entry.Property ("UpdateTime") verwenden. IsModified = true; daher kann dieses Problem durch diese Art und Weise gelöst werden:

var model = new MyTable { Id = Id, UpdateTime = DateTime.UtcNow , Title = "EveryThing" }; 
var dbSet = this.dbContext.Set<MyTable>(); 
dbSet.Attach(model);     
entry = this.dbContext.Entry(model); 
entry.Property("UpdateTime").IsModified = true; 
this.dbContext.SaveChanges();