mam mniej lub bardziej standardowe patrząc model:Wykrywanie zmiany stanu własności modelu, kontroler, przy użyciu Entity Framework
public class Project {
public int ID { get; set; }
//... some more properties
public DateTime StartDate { get; set; }
public int Duration { get; set; }
}
Jeśli użytkownik modyfikuje StartDate
lub projekt Duration
muszę wywołać funkcję aktualizacji symulacja. Aby to osiągnąć, chciałbym wykryć zmianę stanu pól StartDate
i Duration
w kontrolerze.
Coś takiego:
if(project.StartDate.stateChange() || project.Duration.stateChange())
Oto przykład tego, co metoda kontroler będzie wyglądać następująco:
[HttpPost]
public ActionResult Edit(Project project)
{
if (ModelState.IsValid)
{
if(project.StartDate.stateChange() || project.Duration.stateChange())
doSomething();
db.Entry(project).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(project);
}
Każdy pomysł, w jaki sposób można to osiągnąć?
Próbowałem tego.Pojawia się następujący błąd: 'Obiekt z tym samym kluczem już istnieje w ObjectStateManager. ObjectStateManager nie może śledzić wielu obiektów za pomocą tego samego klucza. Opis: Wystąpił nieobsługiwany wyjątek podczas wykonywania bieżącego żądania WWW. Sprawdź ślad stosu, aby uzyskać więcej informacji o błędzie i skąd pochodzi w kodzie. Szczegóły wyjątku: System.InvalidOperationException: Obiekt o tym samym kluczu już istnieje w ObjectStateManager. ObjectStateManager nie może śledzić wielu obiektów z tym samym kluczem. " – Chopo87
Z lub bez" db.Entry (oryginał) .State = EntityState.Modified; '? –
Dobra rada, pozwól mi spróbować, że – Chopo87