2013-12-02 2 views
0

У меня есть требование добавить общий журнал аудита для каждого объекта, поэтому я переопределил метод SaveChanges() в классе DbContext и смог создать журналы.Идентификатор внешнего ключа и описание на SaveChanges() overide - Entity Framework

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

Заранее спасибо

RJ

здесь код

if (dbEntry.State == System.Data.EntityState.Modified) 
{ 
if (!object.Equals(dbEntry.GetDatabaseValues().GetValue<object>(propertyName), dbEntry.CurrentValues.GetValue<object>(propertyName))) 
{ 
var oldvalue = dbEntry.GetDatabaseValues().GetValue<object>(propertyName) != null ? dbEntry.GetDatabaseValues().GetValue<object>(propertyName).ToString() : ""; 
var newvalue = dbEntry.CurrentValues.GetValue<object>(propertyName) != null ? dbEntry.CurrentValues.GetValue<object>(propertyName).ToString() : ""; 
Auidlog += displayName + ": Changed from - " + oldvalue + " To - " + newvalue + " "; 
} 
} 

в OldValue/NEWVALUE переменного возврата только внешний ключ ид, мне нужно описание для этого

+0

код до сих пор? Немного больше информации поможет. Непонятно, что вы пытаетесь сделать и что вы не понимаете, как это сделать. –

+0

Итак, вы понимаете, как использовать dbEntry.CurrentValues ​​и dbEntityEntry.OriginalValues.Note GetDbValues ​​восходит к Db.Different к проверке оригинала. Во всяком случае, вы знаете, что изменилось. Так что же это касается внешних ключей? Вы хотите запросить модель EF? –

+0

Какое описание. У вас есть свойствоName. В каком тексте вы ссылаетесь? –

ответ

0

Вы можете получить доступ к метаданным модели, используя:

ObjectContext objContext = ((IObjectContextAdapter)context).ObjectContext; 
    MetadataWorkspace workspace = objContext.MetadataWorkspace; 
    IEnumerable<EntityType> managedTypes = workspace.GetItems<EntityType>(DataSpace.OSpace); 

В DataSpace.xxxx есть другие перечисления, отображающие разные виды метаданных. Поэтому проверьте их все.

Но как вы планируете получить доступ к полю «текст» в таблице «Первичная». Найдите строку? найти свойство, которое содержит термин «Имя» или текст? Возможно, вы можете реализовать интерфейс на КАЖДОЙ первичной таблице. Или добавьте атрибут в основное текстовое поле таблицы.

Это похоже на выдающийся вызов.

Смежные вопросы