2012-05-08 3 views
3

Я читал некоторые статьи об использовании RelationshipManager, чтобы получить доступ к записям со связанными данными. Мне до сих пор неясно, какой лучший способ проверить, когда объект, связанные данные которого добавлены или обновлены.Аудит многих отношений ко многим в Entity Framework?

Примеров Классов:

public class Rfi 
{ 
    public Guid Id {get;set;} 
    public string Number {get;set;} 
    public virtual ICollection<Attachment> Attachments {get;set;} 
} 

public Class Attachment 
{ 
    public Guid Id {get;set;} 
    public string Name {get;set;} 
    public string Description {get;set;} 
    public string FileName {get;set;} 
    public string Path {get;set;}   
} 

Примеров Отображение:

public class RfiMapping: EntityTypeConfiguration<Rfi> 
{ 
    public Rfimapping() 
    { 
     HasMany(r => r.Attachments).WithMany().Map(m => 
                  { 
                   m.MapLeftKey("RfiId"); 
                   m.MapRightKey("AttachmentId"); 
                   m.ToTable("Rfi_Attachments"); 
                  }); 
    } 
} 

Я использую репозиторий и единицу шаблонов работы. Мой UoW наследует от DbContext. Вызов хранилища может выглядеть следующим образом:

public void AddAttachmentToRfi(Attachment attachment, Guid rfiId) 
{ 
    var rfi = _rfiRepository.FindById(rfiId); 
    rfi.Attachments.Add(attachment); 
    _rfiRepository.UnitOfWork.Commit(); 
} 

Можно ли, в методе переопределенных SaveChanges, чтобы выяснить, что Attachment объект был добавлен в сущность RFI? Когда я пересекаю, скажем, ChangeTracker.Entries, я не вижу, чтобы его состояние было изменено. Это имеет смысл, потому что я только добавляю к отношениям, а не к сущности напрямую.

Я знаю, чтобы передать свой DbContext в IObjectContextAdapter, но я не уверен, что мне нужно сделать с RelationalManager, чтобы получить изменения, внесенные в любые отношения. Мне также интересно узнать, будет ли я позже обновлять свойство описания приложения, если я все еще смогу увидеть, какие изменения были внесены в какие-либо связанные данные.

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

+0

Любые мысли по этому поводу? – DDiVita

+0

Эй @ DDiVita, вы каждый придумали ответ на этот вопрос? Я реализую триггерный базовый аудит в своей первой базе данных EF 6 и испытываю такую ​​же проблему при попытке аудита «связывания» таблиц «многие-ко-многим». – FryHard

ответ

1

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

EF затем преобразует это в вставку или исключает из таблицы Rfi_Attachments.

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

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