0

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.

+0

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) –

+0

Nein damit, Es gibt denselben Fehler. Ich wusste das nicht. Wie man es besser macht? –

+1

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) –

Antwort

0

Leider habe ich die Site-Modell in dieser Aktion vor wie folgt aus:

[HttpPost] 
public ActionResult Meeting(ViewModel ViewModel) 
{ 
//The Error appears if the following part isnt commented out --> 
//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(); 
} 
//... 
} 

So war es der zweite Schlüssel, so könnte nicht die Object mehrere Objekte mit dem gleichen Schlüssel verfolgen.

Verwandte Themen