J'ai une application Web en utilisant EF4. Je suis un peu nouveau pour EF et maintenant essayer de mettre en œuvre le changement Audit.I a essayé de le faire en piégeant l'événement SavingChanges de la classe de contexte comme ci-dessousEntity Framework 4 Change Audit
partial void OnContextCreated()
{
this.SavingChanges += new EventHandler(TicketContainer_SavingChanges);
}
Ainsi, le gestionnaire d'événements accède aux enregistrements modifiés par le
suivantthis.ObjectStateManager.GetObjectStateEntries(
EntityState.Added | EntityState.Modified);
Cela fonctionne bien et je crée l'audit au niveau des colonnes pour les tables sélectionnées. Chaque table/entité a un champ ID qui est un identifiant avec columnName = "ID". Donc, dans ma routine d'audit, j'accède simplement aux données de la colonne avec le nom "Id" pour obtenir l'ID de l'enregistrement audité.
Le problème que je le visage est au cours d'insertion. Le nouvel enregistrement n'a pas encore d'ID car c'est une colonne d'identité dans la base de données et est toujours 0.
Une solution que je peux penser est d'utiliser GUID pour toutes les Ids.Mais est-il un moyen de mettre en œuvre cela en utilisant l'identité standard int32 Ids?
grâce
Salut Wouter Merci d'avoir répondu.Je n'ai pas entièrement compris ce que vous avez suggéré.Mais vous créez probablement une clé F de la table d'audit à votre table réelle que vous avez 1 table d'audit pour chaque entité.Mais dans mon cas je n'ai qu'un Table d'audit unique pour toutes les entités – josephj1989
Pourquoi est-ce que vous êtes limité à une table? Si vous utilisez l'héritage TablePerHierarchy, vous pouvez toujours mettre toute votre hiérarchie d'héritage dans la table. Vous auriez par exemple un type PersonAudit avec une propriété TargetPerson et un TargetPersonId (FK) et un OrderAudit avec une propriété TargetOrder et un TargetOrderId –