У меня есть две таблицы (TableA и TableB) с таблицей мостов между ними. У меня есть объекты, правильно настроенные для обоих, включая свойства навигации для отношения «многие ко многим». Обе сущности расширяют класс AuditBase, который включает в себя «Дата изменения / создания и пользователя ModifiedBy / CreatedBy».
Используя метод фиксации, эта информация аудита автоматически обновляется для любых сущностей, которые расширяют «AuditBase» и находятся в состояния Создан / Изменен.
В настоящее время у меня есть код в некоторых методах Сохранить, чтобы вручную установить для объекта TableB значение «модифицированный», когда элементы добавляются / удаляются из отношения «многие ко многим» через свойство навигации. Таким образом, данные аудита обновляются автоматически, даже если в Таблице B ничего не изменилось.
Я мог бы продолжать использовать этот шаблон, но хотел бы посмотреть, есть ли какой-нибудь способ удалить шаг проверки обновлений вручную чтобы соединить стол. Можно ли как-то обнаружить ожидающие изменения в этой таблице Bridge до вызова Save (в моем методе фиксации) и пометить связанный объект как измененный?
Конфигурация рассматриваемой таблицы мостов -
this.HasMany(u => u.TableA)
.WithMany(r => r.TableB)
.Map(m =>
{
m.ToTable("TableA_TableB", "dbo");
m.MapLeftKey("TableA_Id");
m.MapRightKey("TableB_Id");
});
А вот код, который используется для поиска измененных объектов прямо сейчас -
this._context.ChangeTracker.DetectChanges();
var addedAuditedEntities =
this._context.ChangeTracker.Entries<AuditModelBase>().Where(p => p.State ==
EntityState.Added).Select(p => p.Entity);
var modifiedAuditedEntities =
this._context.ChangeTracker.Entries<AuditModelBase>().Where(p => p.State ==
EntityState.Modified).Select(p => p.Entity);