2011-07-15 96 views
0

我知道這個代碼有一點氣味,但它適合這個項目在這個特定的實現。流利的NHibernate映射左連接

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; } 
    } 
} 

}

我有一個連接表,其中有在層級擁有僱員和TierName那裏,我不能爲我的生活figuire如何做映射類一對一的關係,基本上是一個複合實體,但沒有找到很好的例子

+0

我會認真考慮改變設計。爲什麼不讓InvestmentAdvisor持有對Tier對象的引用,並從交換機塊中生成名稱字符串? – UpTheCreek

+0

我認爲你是對的,我真的不喜歡這現在看起來如何,特別是當我試圖解釋它。我的問題是我真的沒有堅持的Tier對象,它只是一個基於返回靜態類的字符串的Key。但再一次,因爲我解釋一切開始聞更糟 –

回答

0

繼承層次如何?

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"); 
    } 
} 

等等。

+0

Firo,謝謝這是一個比我實施更好的主意,認爲這將是我的下一個重構,謝謝 –

+0

@Brandon Grossutti額外的好處將是,你可以給各種Tier類用於顯示配置的額外字段,可以按組或其他方式應用 – Firo