ich weiß, dass es ziemlich viele Fragen zu diesem Fehler gibt, aber ich konnte mein Problem mit ihnen nicht lösen.Fehler Ein Objekt mit demselben Schlüssel ist bereits im ObjectStateManager vorhanden. mit ViewModel
So bekomme ich den Fehler:
InvalidOperationException
An object with the same key already exists in the ObjectStateManager.
The ObjectStateManager cannot track multiple objects with the same key.
Ich weiß nicht einmal, welche Taste das gleiche ist? Kann ich das irgendwie nachsehen?
Mein -Controller:
[HttpPost]
public ActionResult Meeting(ViewModel ViewModel)
{
var ALL = db.Sites.Where(p => p.Content.Any(a => a.Date.CompareTo(DateTime.Now) <= 0)).OrderBy(l => l.Customer.Service).ToList();
//Adding informations that arnt added by user
ViewModel.Changing.LastUpdate = DateTime.Now;
ViewModel.Changing.LastUpdaterId = UpdaterID;
Site current = ViewModel.Changing;
if (ModelState.IsValid)
{
db.Entry(current).State = EntityState.Modified; //Here is the error
db.SaveChanges();
}
//...
}
Mein Ansichtsmodell
public class ViewModel
{
public managementtool.Models.Site Changing { get; set; }
public int[] AvailableSelected { get; set; }
public int[] RequestedSelected { get; set; }
public string SavedRequested { get; set; }
public List<managementtool.Models.Issue> OpenIssue { get; set; }
public List<managementtool.Models.Issue> ClosedIssue { get; set; }
public managementtool.Models.Site Site { get; set; }
public int ID { get; set; }
}
würde ich für youre Hilfe dankbar.
Wahrscheinlich möchten Sie 'db.Entry (ViewModel.Changing) .State = EntityState.Modified;' aber das eigentliche Problem ist, dass Sie ein Ansichtsmodell mit Eigenschaften haben, die Datenmodelle sind (schlechte Praxis) –
Nein damit, Es gibt denselben Fehler. Ich wusste das nicht. Wie man es besser macht? –
Dann haben Sie anderen Code in der Methode, die Sie uns nicht gezeigt haben. Ein Ansichtsmodell zum Bearbeiten sollte jedoch nur einfache Eigenschaften enthalten, um darzustellen, was Sie in der Ansicht bearbeiten möchten, und nicht Eigenschaften, die Datenmodelle sind. Wenn Sie das Ansichtsmodell übergeben, rufen Sie das Datenmodell aus der Datenbank ab, aktualisieren seine Eigenschaften und speichern das Datenmodell. Siehe [Was ist ViewModel in MVC?] (Http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc) –