2008-09-21 6 views
0

Je dois ajouter une fonction de champs définis par l'utilisateur à une application asp.net C# utilisant NHibernate.Champs définis par l'utilisateur avec NHibernate

L'utilisateur doit être capable d'ajouter et de supprimer des champs de plusieurs objets dans le système "à la volée", de préférence sans interruption du système. Une contrainte importante est que le schéma de base de données ne peut pas être modifié par l'utilisateur, c'est-à-dire que je peux ajouter tous les champs/tables dont j'ai besoin pour supporter cette fonctionnalité mais quand l'utilisateur ajoute ou supprime un champ, il ne peut pas changer le schéma de la base de données.

EDIT: Je dois également trier et filtrer par les valeurs des champs définis par l'utilisateur.

Je sais comment le faire en C#/SQL avec une table clé/valeur, mais je ne sais pas comment le faire avec NHibrenate (y compris le filtrage et le tri par l'utilisateur champs définis)

Répondre

4

Il semble comme vous voulez juste ajouter une table de propriétés nom/valeur. Avoir une table définissant le nom (par exemple ID, FIELDNAME, DESCRIPTION) et une autre définissant la valeur (par exemple, ID, NAME_FK, OBJECT_FK, VALUE)

Demandez à l'utilisateur d'ajouter de nouvelles lignes à la table NAME pour ajouter une nouvelle propriété et ajouter des valeurs en ajoutant des lignes à la table VALUE, à une clé étrangère à la table NAME et à l'objet auquel vous voulez l'attacher.

Votre vue peut ensuite interroger la table VALUE associée à OBJECT_FK et utiliser NAME_FK pour référencer le nom de la propriété.

Edit: NHibernate ne verra pas les nouvelles valeurs que les propriétés réelles, mais si vous les carte en tant que collections, vous devriez être en mesure d'interroger & filtre à l'aide ICriteria:

IList<MyProp> props = session 
    .CreateCriteria(typeof(MyProp)) 
    .Add(Expression.Eq("ObjectName", "Widget")) 
    .Add(Expression.Eq("Name", "Size")) 
    .List<MyProp>(); 
Questions connexes