Ссылки / имеет отображение через 3 таблицы - PullRequest
1 голос
/ 09 мая 2011

Мой объект модели Reading имеет Location, но это не прямая связь в базе данных. В БД это отношение «имеет» или «ссылка» охватывает 3 таблицы, как показано в следующем фрагменте:

enter image description here

Мои Reading отображаются в таблицу ComponentReading, и я хочу, чтобы мои Location отображались в таблицу Location. Мой класс ClassMap<Reading> пока выглядит так:

public class ReadingMap : ClassMap<Reading>
{
    public ReadingMap()
    {
        Table("ComponentReading");
        Id(x => x.ID).Column("ComponentReadingId");

        //References(x => x.Location).Formula(
        Join("VehicleReading", vr =>
            {
                Join("TrainReading", tr =>
                    {
                        tr.References(x => x.Location, "LocationId");
                    });
            });

        Map(x => x.TemperatureValue).Column("Temperature");
    }
}

А вот мое простое отображение Location:

public class LocationMap : ClassMap<Location>
{
    public LocationMap()
    {
        Id(x => x.ID).Column("LocationId");
        Map(x => x.Name);
    }
}

Метод с комментариями References( показывает, чего я хочу достичь с помощью отношений между Reading и Location, но, очевидно, я не могу выразить это в FNH так просто, как предлагает строка комментария.

Я не думаю, что код Join( даже почти верен, но он также пытается передать отношения, к которым я стремлюсь.

Надеюсь, кто-нибудь увидит, что я пытаюсь сделать здесь. Вы можете мне помочь?

Этот вопрос связан.

1 Ответ

0 голосов
/ 19 мая 2011

Я думаю, вы не можете присоединиться таким образом.Уродливое, но прагматичное решение (непроверенное):

class Reading
{
    public virtual int ID { get; set; }

    protected virtual Hidden.TrainReading m_trainReading;

    public virtual Location Location
    { get { return m_trainReading.Location; } set { m_trainReading.Location = value; } }

    public virtual int TemperatureValue { get; set; }

}

namespace Hidden
{
    class TrainReading
    {
        public virtual int ID { get; set; }
        public virtual int VehicleReadingId { get; set; }
        public virtual Location Location { get; set; }
    }
}

public class ReadingMap : ClassMap<Reading>
{
    public ReadingMap()
    {
        Table("ComponentReading");
        Id(x => x.ID).Column("ComponentReadingId");

        References(Reveal.Member<Reading, Hidden.TrainReading>("m_trainReading"), "");

        Map(x => x.TemperatureValue).Column("Temperature");
    }
}

public class TrainReadingMap : ClassMap<Hidden.TrainReading>
{
    public TrainReadingMap()
    {
        Table("TrainReading");
        Id(x => x.ID).Column("TrainReadingId");

        References(x => x.Location, "LocationId");

        Join("VehicleReading", vr =>
        {
            vr.KeyColumn("TrainReadingId");
            vr.Map(x => x.VehicleReadingId, "VehicleReadingId");
        });
    }
}
...