Как обновить реляционную базу TABELS?
Я использую Entity Framework 4.0. Я столкнулся с проблемой при обновлении данных в базе данных. Я получаю это исключение:
Объект с таким же ключом уже существует в ObjectStateManager.
ObjectStateManager не может отслеживать несколько объектов с одним и тем же ключом.
Я работаю над реляционной базой данных. Ниже приведены 3 сущности и их связь:
1 to * 1 to *
Ceremony -----------> Menu ------------> CourseOption
Все работает нормально, если я обновлю церемонию, которая уже содержитMenus
а такжеCourseOptions
, Проблема возникает, когда мы вставляем новыйMenu
а такжеCourseOption
запись в церемонии во время обновления. Чем я получил вышеупомянутое исключение.
Код C # для обновления существующей церемонии
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);
}
}
Как я могу избавиться от этой проблемы? Пожалуйста помоги
РЕДАКТИРОВАТЬ
Сегодня я провожу целый день в этом, я прочитал много статей и вопросов о stackoverflow. я нашел этоonce a product is fetched from the Context, the context is keeping track of it
так что почему вместо использования:
db.Entry(ceremony).State = EntityState.Modified;
я использовал
db.Entry(db.Ceremonies.Find(ceremony.Id)).CurrentValues.SetValues(ceremony);
Теперь, сделав это изменение, исключение исчезло, и свойства объекта Ceremony изменились должным образом. Но запись меню, связанная с церемонией, и запись CourseOptions не обновляются. Пожалуйста, дайте мне предложение, ребята. Я абсолютно новый в EF.