gerade diese ersetzen:
db.Entry(ID).State = EntityState.Modified;
//ID.name = model.name;
//ID.address = model.address;
//ID.age = model.age;
//ID.email = model.email;
//ID.isActive = model.isActive;
mit:
UpdateModel(ID);
und Sie werden in Ordnung;
Damit Ihre Methode funktioniert, müssen Sie wie dies zu tun:
db.Students .Attach(ID);
var entry = db.Entry(ID);
entry.State = EntityState.Modified;
entry.Property(x => x.name).IsModified = true;
entry.Property(x => x.address).IsModified = true;
....
db.SaveChanges();
Grundsätzlich müssen Sie das aktualisierte Modell anhängen dann auf den Kontext zu erzählen, die Requisiten verändert werden.
ich in meinem Repository habe, eine andere Methode, die ich in einigen Situationen zu verwenden, wenn das Update nicht in der Steuerung durchgeführt wird, ist das Verfahren:
public void Update(TEntity newEntity)
{
var oldEntity = Context.Set<TEntity>().Find(newEntity.Id);
Context.Entry(oldEntity).CurrentValues.SetValues(newEntity);
}
In diesem Verfahren wird die newEntity
aus dem comming Ansicht, und die oldEntity
stammt aus dem Kontext.
UpdateModel
kann nur in Steuerungen verwendet werden, wenn ich das Update außerhalb des Controllers aufrufen, verwende ich die obige Methode. Ich bevorzuge diese Methode, weil ich nicht explizit sagen muss, welche Requisiten modifiziert wurden. Wenn Sie ein Formular mit 10 Requisiten haben und der Benutzer nur 3 oder 4 aktualisiert, benötigen Sie viel Logik, um zu bestimmen, welche Änderungen vorgenommen wurden.
PS - meine Entitäten alle implementieren IEntityId
, die eine Schnittstelle mit gemeinsamen Eigenschaften ist, wie Id, UpdateDate, Insert ..., das ist, warum ich newEntity.Id
Sie mehr über 'UpdateModel' hier lesen: https: // msdn.microsoft.com/en-us/library/system.web.mvc.controller.updatemodel (v = vs.118).aspx –
Vielen Dank @Lucian es funktioniert wirklich für mich, aber können Sie bitte erklären, warum db.Entry (ID) .State = EntityState.Modified; funktioniert nicht?? Und diese beiden Methoden sind gleich? thnxx – Heartlion