Справочная информация:
У меня есть веб-приложение, для которого мне нужно выполнить аудит базы данных для вставки / удаления / обновления (и, возможно, чтения). Я использую LINQ в качестве своего ORM. Используя некоторые идеи, которые я нашел в Интернете, я нашел способ использования атрибутов для украшения моих сущностей, которые имеют связанные таблицы аудита. Сама таблица аудита должна включать те же столбцы с теми же типами, что и исходная таблица, в дополнение к полям для идентификатора и имени текущего пользователя, типа модификации, времени модификации и того, была ли операция успешной или нет. Аудит происходит во время SubmitChanges - мой контекст данных является абстрактным, и я наследую и переопределяю SubmitChanges в моей конкретной реализации. Фактически абстрактный контекст данных происходит от AbstractAuditableDataContext, который расширяет DataContext и добавляет свойство CurrentUser с заполнителями для текущего идентификатора пользователя и имени. По умолчанию это 0 и «system» для случаев, когда нет вошедшего в систему пользователя - скажем, при регистрации или входе в систему, когда некоторые поля пользовательской таблицы могут быть обновлены. Приложение написано на C # с использованием ASP.NET MVC.
Проблема:
Каков наилучший способ заполнить текущее пользовательское свойство моего производного контекста данных? Должен ли я создать служебный класс, который будет вставлен в AuditUtility, который проверяет, был ли установлен CurrentUser, и, если нет, заполняет его. Для тестирования я бы смоделировал это, но в живом приложении оно, вероятно, использовало бы ленивый -загрузка и получить / установить его в сеансе. Или я должен изменить фабрику контекста данных (используется всеми контроллерами) для выполнения этой функции. Я уже использую фиктивную фабрику во время модульного тестирования, так что это не потребует создания новых классов. Или же деривация должна производиться вне фабрики, а текущий пользователь вводится во время создания контекста. Это позволило бы мне проводить аудит «от имени».
Я понимаю, что это несколько субъективно, но я был бы признателен за любые мысли / опыт, которые вы могли бы внести.
Спасибо.