Я читал некоторые статьи об использовании 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. Это может усложниться, если это вложение будет передано другому объекту, но я перейду через эту дорогу позже.
Любые мысли по этому поводу? – DDiVita
Эй @ DDiVita, вы каждый придумали ответ на этот вопрос? Я реализую триггерный базовый аудит в своей первой базе данных EF 6 и испытываю такую же проблему при попытке аудита «связывания» таблиц «многие-ко-многим». – FryHard