Я знаю, что есть довольно много вопросов к этой ошибке, но я не мог решить свою проблему с ними.Ошибка Объект с тем же ключом уже существует в 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.
Возможно, вы хотите, чтобы 'db.Entry (ViewModel.Changing) .State = EntityState.Modified;' но реальная проблема заключается в том, что у вас есть модель представления, содержащая свойства, которые являются моделями данных (плохая практика) –
Нет, такая же ошибка. Я этого не знал. Как сделать это лучше? –
Тогда у вас есть другой код в методе, который вы нам не показали. Но модель просмотра для редактирования должна содержать только простые свойства для представления того, что вы хотите редактировать в представлении, а не для свойств, которые являются моделями данных. Когда вы отправляете модель представления, вы получаете модель данных из базы данных, обновляете ее свойства и сохраняете модель данных. См. [Что такое ViewModel в MVC?] (Http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc) –