Jak zaktualizować relacyjne bazy danych TABELS?
Używam Entity Framework 4.0. Mam problem z aktualizacją danych w bazie danych. Otrzymuję ten wyjątek:
Obiekt z tym samym kluczem już istnieje w ObjectStateManager.
ObjectStateManager nie może śledzić wielu obiektów za pomocą tego samego klucza.
Pracuję nad relacyjną bazą danych. Poniżej znajdują się 3 podmioty i relacja:
1 to * 1 to *
Ceremony -----------> Menu ------------> CourseOption
Wszystko działa dobrze, jeśli zaktualizuję ceremonię, która już zawieraMenus
iCourseOptions
. Problem pojawia się, gdy wstawiamy nowyMenu
iCourseOption
wejście na ceremonię w momencie aktualizacji. Potem otrzymałem wspomniany powyżej wyjątek.
Kod C #, aby zaktualizować istniejącą ceremonię
public HttpResponseMessage PutCeremony(int id, Ceremony ceremony)
{
if (ModelState.IsValid && id == ceremony.Id)
{
db.Entry(ceremony).State = EntityState.Modified;
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
return Request.CreateResponse(HttpStatusCode.NotFound);
}
return Request.CreateResponse(HttpStatusCode.OK, ceremony);
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
Jak mogę pozbyć się tego problemu? Proszę pomóż
EDYTOWAĆ
Dzisiaj spędzam w tym cały dzień, czytam wiele pytań dotyczących artykulacji i stackoverflow. znalazłem toonce a product is fetched from the Context, the context is keeping track of it
więc dlaczego zamiast:
db.Entry(ceremony).State = EntityState.Modified;
użyłem
db.Entry(db.Ceremonies.Find(ceremony.Id)).CurrentValues.SetValues(ceremony);
Teraz, wykonując tę zmianę, wyjątek i właściwości obiektu ceremonii zmieniają się prawidłowo. Ale pozycja menu związana z ceremonią i wpis CourseOptions nie są aktualizowane. Proszę dać mi sugestie. Jestem całkowicie nowy w EF.