2011-06-16 1 views
0

Я видел много сообщений по SE, относящихся к этому, но никто не ответил на вопрос удовлетворительно. Если есть сообщение, которое отвечает на это (с примером фактического кода), пожалуйста, укажите мне в этом направлении.Entity Framework 4: Как получить исходные значения дочернего объекта при сохранении родителя?

Мне нужно записать информацию в журнал при сохранении объекта. Мне нужно знать исходные значения и новые значения. Это очень легко для родительского объекта, и даже довольно легко получить значения для любых измененных дочерних объектов. Задача заключается в получении значений оригинала значений дочернего объекта.

Например, пользователь может изменить дочерний объект в раскрывающемся списке. Это изменяет значение внешнего ключа родителя. При сохранении мне нужно написать текстовое описание (значение ToString() или другое значение) измененного объекта в журнале, а не значение внешнего ключа.

ObjectStateEntry содержит текущие значения и исходные значения родителя, но как получить текущие и исходные значения измененного дочернего объекта?

Кажется, что это то, что должно быть возможно, но слишком сложно выполнить или было упущено командой разработчиков Microsoft.

Заранее благодарим за любую помощь.

+0

Почему вы не можете получить изменения, используя 'var entity = context.Entry (ваш дочерний сущностный экземпляр);' и затем используя 'entity.OriginalValues'? – Eranga

+0

Ну, если бы я хотел жестко закодировать имена для каждого объекта, но мне нужен более общий метод, который мог бы исследовать объект, получить старые и новые значения для всего, что изменилось, и если произойдет одно из этих значений быть внешним ключом, получать старые и новые значения объекта в отношениях. – camainc

ответ

0

Точно так же вы всегда получаете это: вы смотрите. Помните, что в вашем случае «дочерний объект» может даже не загружаться из БД. Существует no требование сделать это, прежде чем изменять значение FK на «parent».

Не похоже, что вы фактически изменили «дочерний объект» . Скорее всего, вы просто изменили «родительскую» точку на различных дочерних объектов.

В этом случае я бы использовал Context.GetObjectByKey(), чтобы вытащить объект на основе исходного значения FK. Это захватывает его из памяти, если оно загружается, а из БД - нет.

+0

Спасибо. В моем случае дочерний объект загружается, и он показывает новые значения на основе изменения внешнего ключа, но я вижу вашу точку. Я думал, что мне придется перезагрузить дочерний объект из базы данных, чтобы получить исходные значения, но это казалось очень дорогим. Я попробую метод GetObjectByKey(), с которым я не знаком. – camainc