Свободное отображение NHibernate Left Join - PullRequest
0 голосов
/ 16 июля 2011

Я знаю, что этот код немного пахнет, но он подходит этому проекту в данной конкретной реализации.

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

}

У меня есть таблица соединений, где есть один, чтобыодно отношение на уровне, где есть employeeID и TierName, я не могу на всю жизнь понять, как создать класс Mapping, в основном составную сущность, но не могу найти хороших примеров

1 Ответ

0 голосов
/ 19 июля 2011

Как насчет наследования, хирарчи?

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

и т.

...