Contexte:audit LINQ utilisateur actuel avec l'application web
J'ai une application Web pour laquelle je dois faire l'audit de base de données pour insérer/supprime/mises à jour (et lit peut-être). J'utilise LINQ comme mon ORM. En utilisant quelques idées que j'ai trouvées sur le web, j'ai trouvé une façon d'utiliser des attributs pour décorer mes entités qui ont des tables d'audit associées. La table d'audit elle-même doit inclure les mêmes colonnes avec les mêmes types que la table d'origine en plus des champs pour l'ID et le nom de l'utilisateur actuel, le type de modification, l'heure de modification et si l'opération a réussi. L'audit a lieu au cours de SubmitChanges - mon contexte de données est abstrait et j'hérite et substitue SubmitChanges dans ma mise en œuvre concrète. Le contexte de données abstraites provient en fait d'un AbstractAuditableDataContext qui étend DataContext et ajoute une propriété CurrentUser avec des espaces réservés pour l'ID et le nom d'utilisateur en cours. Par défaut, ils sont 0 et "système" pour les instances où il n'y a pas d'utilisateur connecté - disons lors de l'enregistrement ou de la connexion lorsque certains champs de la table utilisateur peuvent être mis à jour. L'application est écrite en C# en utilisant ASP.NET MVC.
Problème:
Quelle est la meilleure façon de remplir la propriété de l'utilisateur actuel de mon contexte de données dérivées? Dois-je créer une classe utilitaire qui est injectée dans AuditUtility qui vérifie si CurrentUser a été définie et, sinon, la remplit. Pour tester, je me moquerais de ça, mais dans l'application live, il utiliserait probablement paresseux -loading et get/set dans la session. Ou devrais-je modifier la fabrique de contexte de données (utilisée par tous les contrôleurs) pour exécuter cette fonctionnalité. J'utilise déjà une fausse usine lors des tests unitaires, donc cela n'implique pas la création de nouvelles classes. Ou la dérivation doit-elle être effectuée en dehors de l'usine et l'utilisateur actuel doit-il être injecté lors de la création du contexte. Cela me permettrait de faire «au nom de» l'audit. Je me rends compte que c'est quelque peu subjectif, mais j'apprécierais toutes les pensées/expériences que vous pourriez contribuer.
Merci.
La portée du contexte de données est par action - c'est assez éphémère. – tvanfosson