2015-12-15 6 views
0

Я пытаюсь использовать ChangeTracker из EF, чтобы выполнить аудит и сохранить все изменения в базе данных (добавить + обновление).Получить первичный ключ записи отношений с ObjectContext

С ChangeTracker Я смогу получить все измененные таблицы и все значения для каждого. Но мне также нужен идентификатор новых записей в новых таблицах.

Некоторые из них являются отношениями, и когда я пытаюсь получить значение с EntityKey, первичным ключом 0

private object GetPrimaryKeyValue(DbEntityEntry entry) 
{ 
    var objectStateEntry = ((IObjectContextAdapter)this).ObjectContext.ObjectStateManager.GetObjectStateEntry(entry.Entity); 
    return objectStateEntry.EntityKey.EntityKeyValues[0].Value;  
} 

Кто-то знает, если я нахожусь на неправильном пути, и если это возможно, чтобы получить первичный ключ связанного объекта?

Спасибо!

+0

Я думаю, вам нужно проверить таблицу базы данных. Если это первичный ключ, он не может быть нулевым (см. Http://stackoverflow.com/questions/3876785/sql-server-cant-insert-null-into-primary-key-field). – Roger

+0

На самом деле я сказал что-то не так, это не пусто, но 0. Первичный ключ - это автоинкрементное поле в таблице. –

ответ

0

Я думаю, что вы получаете 0 (это значение по умолчанию (int)), потому что автоинкрементные (идентификационные) столбцы заполняются только после того, как выполнено сохранение (то есть dbContext.SaveChanges завершен успешно). Попробуйте прочитать значение после SaveChanges(), как предложено here.

Это похоже на способ поймать новые добавленные значения, вы должны переопределить SaveChanges и получить собственные значения самостоятельно, как упомянуто here.

+0

Да, но я хочу, чтобы сохранить в другую таблицу все новые добавленные значения, для чего я извлекаю их все с помощью ChangeTracker из EF. Когда речь идет о обновлении существующих данных, это не проблема, но в этом случае это для новых строк, а первичный ключ - 0 –

+0

. Я добавил дополнительную ссылку в свой ответ. – Alexei

+0

Просто небольшое примечание: поскольку мне не нравятся триггеры, я предпочитаю .NET-решения. Однако имейте в виду, что триггеры могут быть более подходящими, если данные таблицы могут быть изменены другим приложением, чем ваши собственные. – Alexei