EF4 POCO - Обновление свойства навигации - PullRequest
2 голосов
/ 08 января 2010

У меня есть объект Рекомендации и объект FeedbackLevel, а объект FeedbackLevel - это свойство навигации внутри объекта Рекомендации

Рекомендация int EntityKey; Уровень обратной связи;

Вставка нового прекрасно работает с AddObject (). Вот что я пытаюсь с обновлением, которое не работает.

recommendation.Level = myRepository.GetFeedbackLevel(newLevel);
_context.Recommendations.Attach(new Recommendation { EntityKey = recommendation.EntityKey });
_context.Recommendations.ApplyCurrentValues(recommendation);
_context.SaveChanges(System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);

Приведенный выше код в основном является компактной версией того, что у меня есть. Обновление скалярного свойства работает просто отлично, но я не могу обновить новое свойство навигации, так как код avove успешно выполняется без каких-либо изменений!

Я также попробовал несколько других методов, например сначала получить существующую Рекомендацию, а затем переназначить ей FeedbackLevel без какой-либо удачи.

UPDATE:

Вот что я захватил из профилировщика sql во время вызова сохранения:

exec sp_executesql N'update [dbo].[Recommendation]
set [FeedbackComment] = @0, [LastUpdatedDate] = @1
where ([RecommendationKey] = @2)
',N'@0 varchar(255),@1 datetime,@2 int',@0='This is cool',@1='2010-01-08 10:06:06.5400000',@2=11

Похоже, он даже не знает, что FeedbackLevel необходимо сохранить. Как я могу заставить это вызвать это?

1 Ответ

0 голосов
/ 04 ноября 2011

Не совсем точно, что вы пытаетесь сделать здесь, но если вы пытаетесь сделать обновление, простой способ -

1) сделать a, GET [entityName] по id, использовать include для получения любых дочерних свойств

2) обновить атрибуты

3) убедитесь, что состояние объекта изменено

4) Сохранить изменения

Выполнив сначала GET, вам не нужно привязывать его к контексту перед обновлением, так как он уже будет там.

...