Entity Framework 6 (premier code) de l'entité de gestion de version et de l'audit
Je suis à la recherche à l'aide de Entity Framework 6.1.1 avec SQL Server 2008 R2.
Actuellement je crée mes modèles et bases de données à l'aide du code-première EF fonctionnalité. Ma base de cas d'utilisation est de créer un journal de toutes les modifications apportées à une entité particulière (ID
est la clé de la colonne) pour aider les auditeurs de suivre tous les changements effectués et par qui. e.g:
|ID|Version|Created Date|Created By|Modified Date|Modified By|Modify Action| ... (rest of entity fields)
-------------------------------------------------------------------------------------------------------
| 4| 12 | 12-Mar-14 | tom | 20-Feb-15 | jack | Update |
| 4| 11 | 12-Mar-14 | tom | 14-Feb-15 | jill | Update |
| 4| 1 | 12-Mar-14 | tom | 12-Mar-14 | tom | Create |
N'Cadre de l'Entité en charge ce type de base de données? Si oui, comment puis-je définir mes modèles/solution en place pour faciliter ce processus?
L'autre solution que j'ai est en interceptant tous les appels à la SaveChanges()
méthode sur la DbContext
et d'enregistrer toutes les modifications de base de données dans un Audit
table, mais cela pourrait faire de la récupération des informations plus difficile.
Toute aide sur la création de pistes de vérification avec SQL Server et EF 6 serait greately apprécié.
Cela peut éventuellement vous aider sur votre chemin: auditdbcontext.codeplex.com
J'étais plutôt dans l'espoir d'avoir de l'entité versions comme cela est compatible avec d'autres applications de base de données. Actuellement, la gestion des versions est géré par monster T-SQL de fonctions que je n'ai aucune envie de mettre en œuvre, surtout avec EF!
OriginalL'auteur TK. | 2015-02-20
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé la 2ème approche que vous mentionnez, par la surcharge de la dbContext SaveChanges() méthode:
Donc, si je veux enregistrer une entité particulière, je viens d'appeler la surcharge SaveChanges & pass dans un UserId:
J'ai aussi une coutume
DoNotLog
attribut que j'utilise pour décorer les propriétés d'entité que je ne veux pas de journal. Sans cela, la journalisation peut générer une énorme quantité de données, chaque entité modification équivaut à un db d'entrée.La
GetAuditRecordsForChange
méthode qui effectue la vérification de toutDoNotLog
propriétés et renvoie unList<AuditLog>
qui est enregistré dans le AuditLogs table:OriginalL'auteur markpsmith
Vous pourriez regarder Entity Framework Étendu. Il a de la vérification de la fonctionnalité que j'ai utilisé pour enregistrer toutes les modifications apportées aux entités XML. À partir de la documentation:
Mise à JOUR:
Entity Framework Étendue n'est plus supporté depuis 2015.
Veuillez vous référer à Entity Framework Plus pour cette fonction.
OriginalL'auteur GraemeMiller
Je dirais que c'est un bon candidat pour l'event sourcing motif mentionné dans un DDD architecture. Vous ne changez jamais votre table d'entité, mais toujours de l'insertion.
De cette façon, lorsque vous avez besoin d'une version spécifique que vous venez de re-jouer à tous les événements et de les appliquer à l'entité à partir de la version 0 de la version que vous recherchez. L'évolutivité peut être résolu avec l'entité instantanés.
Deuxième approche est aussi valable.
De référence:
http://microservices.io/patterns/data/event-sourcing.html
OriginalL'auteur Hugo Marcelo Del Negro