2011-07-15 4 views
0

Je sais que ce code a un peu d'odeur mais il convient à ce projet dans cette implémentation spécifique.Fluid NHibernate Mapping Left Join

public class InvestmentAdvisorMap: ClassMap<InvestmentAdvisor> 
{ 
    public InvestmentAdvisorMap() 
    { 
     Id(x => x.EmployeeID).GeneratedBy.Assigned() 
      .Access.CamelCaseField(Prefix.Underscore); 

     Not.LazyLoad(); 
     Table("Employee"); 
     //need mapping to tierName here???? that links to join table 
    } 
} 

public class InvestmentAdvisor 
{ 
    private readonly Guid _employeeID; 
    private string _tierName; 

    public Tier Tier 
    { 
     get 
     { 
      switch (_tierName) 
      { 
       case "<$100K": 
        return Tier.LessThan100K; 
       case "$100K+": 
        return Tier.MoreThan100K; 
       case "$240K+": 
        return Tier.MoreThan240K; 
       case "$400K+": 
        return Tier.MoreThan400K; 
       case "$600K+": 
        return Tier.MoreThan600K; 
       case "$1M+": 
        return Tier.MoreThan1M; 
       default: 
        return Tier.LessThan100K; 
      } 
     } 
    } 

    public string TierName 
    { 
     get { 
      return _tierName; 
     } 
    } 

    public Guid EmployeeID 
    { 
     get { return _employeeID; } 
    } 
} 

}

j'ai une table de jointure où il y a une relation un à un sur niveau où qui a employeeID et TierName, je ne peux pas pour la vie de moi figuire comment faire la classe de cartographie, fondamentalement une entité composite, mais ne trouve pas de grands exemples

+0

Je envisagerais sérieusement de changer le design. Pourquoi ne pas laisser InvestmentAdvisor conserver une référence à un objet Tier et générer la chaîne de nom à partir d'un bloc de commutation? – UpTheCreek

+0

Je pense que tu as raison, je n'aime vraiment pas à quoi cela ressemble en ce moment, surtout quand j'essaie de l'expliquer. Mon problème est que je n'ai vraiment aucun objet Tier persisté, c'est simplement une clé basée sur une chaîne qui retourne une classe statique. Mais encore une fois comme je l'explique tout commence à sentir encore pire –

Répondre

0

Qu'en est-il de l'héritage de la hiérarchie?

public abstract class Tier 
{ 
    public abstract void DoSomething(); 
} 

class TierMap : ClassMap<Tier> 
{ 
    public TierMap() 
    { 
     DiscriminateSubClassesOnColumn("TierName"); 
    } 
} 

public class LessThan100K : Tier 
{ 
    public override void DoSomething() 
    { 
     // Do something useful 
    } 
} 

class LessThan100KMap : SubclassMap<LessThan100K> 
{ 
    public LessThan100KMap() 
    { 
     DiscriminatorValue("<$100K"); 
    } 
} 

et ainsi de suite.

+0

Firo, merci c'est une meilleure idée que ce que j'ai mis en œuvre, pense que ce sera mon prochain refactor, merci –

+0

@Brandon Grossutti avantage ajouté serait, que vous pouvez donner le différentes classes Tier champs supplémentaires pour la configuration de l'affichage, qui peut être appliqué par groupe ou autre – Firo