2013-08-20 2 views
2

Dire que j'ai quelque chose comme classe ...façon optimale pour modéliser une classe générique dans NHibernate

public class SomeClass<T> where T : ISomeConstrainingInterface 
{ 
    public T MyPropertyOfTypeT {get;set;} 
    public int SomeIntProp {get;set;} 
    public string SomeStringProp {get;set;} 
} 

Où T peut être un ensemble limité assez petit (disons 5 ou 6 types)

Quel est le meilleur et le plus efficace moyen de mapper cette classe dans nHibernate? (en utilisant fluentNHibernate)

+0

Quelles sont les tables nommées, ou êtes-vous libre de les nommer comme vous le souhaitez? –

+0

@DanielSchilling Yep libre de modéliser les tables comme je l'aime. Je vois 2 options principales, une table avec 2 cols supplémentaires, une pour représenter le type et l'autre avec l'Id. L'inconvénient de ceci est une jointure plus complexe à chaque fois (un type de jointure). Ou de l'autre façon serait d'avoir un col pour chaque type supplémentaire et de simplement remplir celui qui est utilisé. Pas très élégant (CS enseignants grinceraient) mais probablement plus performant. –

+0

Je suppose que 'T' est une entité, pas un type de valeur. Donc SomeClass est utilisé pour décorer quelques données supplémentaires sur un assortiment de différentes entités, comme une étiquette. Est-ce l'idée? –

Répondre

0

Ceci va créer une table séparée pour chaque type de concrétion de SomeClass, donc il n'y a pas de problème avec différents types d'ID et des clés étrangères sont possibles. SomeClass devrait implémenter une interface afin que tout puisse être utilisé pour être interrogé et traité de manière générique.

public abstract class SomeClassMapBase<T> : ClassMap<SomeClass<T>> 
{ 
    public SomeClassMapBase() 
    { 
     Map(x => x.SomeIntProp); 
     Map(x => x.SomeStringProp); 
    } 
} 

public class SomeClassReferencedClassMap : SomeClassMapBase<ReferencedClass> 
{ 
    public SomeClassReferencedClassMap() 
    { 
     CompositeId() 
      .KeyReference(x => x.Referenced, "Refernece_id"); 
    } 
} 
Questions connexes