1

J'ai une table d'événements dont le but est de stocker les actions effectuées par les utilisateurs du site Web. Une action modifie ou crée une nouvelle ligne dans une table X. Cela me permettra de stocker un historique de toutes les actions effectuées par un utilisateur. À ce titre, des événements contient:Est-ce que cette cartographie peut être faite avec (Fluent) NHibernate?

  • une colonne de clé primaire
  • un texte pour décrire l'événement (ex: "a posté un commentaire")
  • une colonne de discriminateur si nécessaire
  • une colonne clé étrangère a une autre table
  • une colonne de clé étrangère à une autre table B
  • ....
  • une colonne de clé étrangère à une autre table N

Une ligne de la table Events ne disposera que d'une des colonnes de clé étrangère, toutes les autres seront nulles (elles sont donc toutes nulles). La table se comporte comme une table d'indirection de la table concernée par l'événement. Je ne sais pas si un discriminateur est nécessaire puisque toutes les informations sont contenues dans les colonnes de la clé étrangère. Les tableaux A à N peuvent être n'importe quoi. Leur classe de modèle de domaine peut avoir une interface commune si nécessaire (IEventRecordable).

Ma question est: Un mappage est-il possible entre la table Events et une classe Event? Est-il particulièrement faisable avec le nhibernate courant? Peut-il être fait sans avoir à créer beaucoup de classes dérivées de l'événement (je ne veux pas créer autant de sous-classes vides)? La classe de l'événement serait idéalement comme suit:

public class Event 
{ 
    public virtual int Id { get; set; } 
    public virtual IEventRecordable ActualEvent { get; set; } 
    public virtual string EventDescription { get; set; } 
    DateTime EventDateTime { get; set; } 
} 

De nombreuses classes parmi les classes de modèle de domaine pourrait mettre en œuvre IEventRecordable (qui est principalement une interface vide). Il pourrait être la table d'utilisateur ou une table BlogComment ...

Merci

Répondre

2

Si vous oubliez les multiples colonnes de clé étrangère, vous pouvez en faire un <any> mapping.

+0

Ensuite, il devrait vraiment s'appeler «Conversational NHibernate». :) – Thom

Questions connexes