Entity Framework 4 - Как обновить объект - PullRequest
0 голосов
/ 23 марта 2011

нетто 4 и с #.

У меня есть объект (myContentObj) и навигационное свойство (CmsGroupsTypes).

Мне нужно обновить навигационное свойство для конкретного объекта.

В данный момент я использую этот код ниже, чтобы удалить текущую связь и добавить новую, чтобы я мог обновить навигационное свойство.

Хотя мой код работает, я хотел бы знать, если вы знаете лучший подход к нему ... Я не уверен, существует ли метод UPDATE или аналогичный в EF4.

Спасибо за вашу помощь!

            // Remove object
            myContentObj.CmsGroupsTypes.Remove(myCurrentGroupTypeObj);
            // Update object
            myContentObj.CmsGroupsTypes.Add(myNewGroupTypeObj);
            context.SaveChanges();

Ответы [ 3 ]

1 голос
/ 23 марта 2011

Контекст отслеживает ваши объекты, просто получает его из контекста, изменяет его данные и Context.SaveChanges ()

1 голос
/ 23 марта 2011

Это правильный подход. Вы изменяете свойство навигации = вы изменяете отношение между сущностями. Чтобы удалить связь между сущностями, вы должны удалить связанную сущность из свойства навигации. Чтобы добавить отношение между объектами, необходимо добавить связанный объект в свойство навигации.

Единственная проблема может возникнуть, если вы вызываете Add с сущностью, которая существует в БД, но не загружена из базы данных (фиктивный объект или отдельная сущность). В этом случае EF попытается снова вставить вашу сущность в базу данных. Чтобы избежать этого, вы должны либо использовать присоединенный объект (загрузить его из БД), либо установить его состояние на Unchanged.

Другим способом является использование иностранного объединения, когда зависимое лицо также предлагает свойство внешнего ключа. Вы можете изменить отношение, просто установив для этого свойства идентификатор родителя. Это применимо только для отношений один-к-одному и один-ко-многим.

Имейте в виду, что удаление сущности из свойства навигации родителя не удаляет сущность дочерняя сущность из базы данных. Поэтому, если отношение к родителю является зависимым, вы также должны удалить его или SaveChanges выдает исключение.

0 голосов
/ 23 марта 2011

Я не совсем уверен в этом, и я не могу проверить это прямо сейчас, но я думаю, что вы можете напрямую изменить свойства myCurrentGroupTypeObj, а затем выполнить

ObjectStateManager.ChangeObjectState(myCurrentGroupTypeObj , EntityState.Modified);

Я надеюсь, что это работает.Если нет, пожалуйста, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...