0

Я знаю, что есть довольно много вопросов к этой ошибке, но я не мог решить свою проблему с ними.Ошибка Объект с тем же ключом уже существует в ObjectStateManager. с ViewModel

Так я получаю ошибку:

InvalidOperationException
An object with the same key already exists in the ObjectStateManager.
The ObjectStateManager cannot track multiple objects with the same key.

Я даже не знаю, какой ключ то же самое? Могу ли я так посмотреть?

Мой контроллер:

[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(); 
    } 
    //... 
} 

Мой ViewModel

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; } 
} 

Я был бы признателен за помощь Youre.

+0

Возможно, вы хотите, чтобы 'db.Entry (ViewModel.Changing) .State = EntityState.Modified;' но реальная проблема заключается в том, что у вас есть модель представления, содержащая свойства, которые являются моделями данных (плохая практика) –

+0

Нет, такая же ошибка. Я этого не знал. Как сделать это лучше? –

+1

Тогда у вас есть другой код в методе, который вы нам не показали. Но модель просмотра для редактирования должна содержать только простые свойства для представления того, что вы хотите редактировать в представлении, а не для свойств, которые являются моделями данных. Когда вы отправляете модель представления, вы получаете модель данных из базы данных, обновляете ее свойства и сохраняете модель данных. См. [Что такое ViewModel в MVC?] (Http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc) –

ответ

0

К сожалению, я использовал модель сайта в этом действии, прежде чем, как это:

[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(); 
} 
//... 
} 

Так был вторым ключом, так что ObjectStateManager не могла отслеживать несколько объектов с тем же ключом.

 Смежные вопросы

  • Нет связанных вопросов^_^