2014-01-30 2 views
1

Я пользовательские атрибуты определяю для каждого свойства моделейDbContext Сохранить: Доступ пользовательских атрибуты

[Auditable] 
public class Student : BaseObject 
{ 
    public Student() 
     // Change this parameter to change the DisplayName 
     // (this name is used in all system messages) 
     // property of this object 
     : base("Student") { } 

    public int StudentId { get; set; } 

    [Auditable(false)] 
    public int OfficeAddressId { get; set; } 

При сохранении зачетного я хочу проверить для проверяемых свойств и записать их в таблицу audittrack. Я хочу сделать это в

private void CurrentObjectContext_SavingChanges(object sender, EventArgs e) 
    { 

Может ли кто-нибудь направить меня, чтобы получить доступ к объекту с помощью Auditable (false) и другие против каждого объекта.

+0

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

+0

@ilay zeidman, предположим, что в вашем BLL есть бизнес-модели. Я хочу иметь возможность отслеживать изменения свойств (свойств), которые вы делаете для свойств этих моделей. Например, может быть модель с именем «student», тогда у ученика может быть несколько свойств, которые я, возможно, не хочу отслеживать. Но скажем, что в студенческой модели есть свойство с именем «PaymentMade», которое я * хочу * отслеживать сделанные изменения. Я ожидаю решения для этого. Продолжить ... –

+0

В этом смысле я планирую отметить свойство с именем настраиваемого атрибута [Audit (true)]. Могут существовать другие аналогичные модели, которые имеют аналогичные потребности в моем BLL. Итак, теперь, когда эти объекты сохраняются в базе данных, я хочу отдельно отслеживать все свойства этих моделей, отмеченные атрибутом аудита. Это необходимо отслеживать в событии CurrentObjectContext_SavingChanges (object sender, EventArgs e) и записывать изменения в отдельную таблицу, поддерживающую контрольные журналы. Итак, вопрос заключается в том, как вы захватываете свойства модели с помощью атрибута Audit внутри этого события. End !! –

ответ

1

Вы можете использовать это выражение LINQ, чтобы получить все свойства sender аннотированных с атрибутом Auditable (при условии IsAuditable является свойством атрибута Auditable, где значение из конструкторы хранится)

var auditableProperties = from p in sender.GetType().GetProperties() 
    let attribute = p.GetCustomAttributes(typeof(AuditableAttribute), false).SingleOrDefault() as AuditableAttribute 
    where attribute != null && attribute.IsAuditable == true 
    select p; 

Результат выражение представляет собой набор объектов PropertyInfo.

+0

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

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