2011-05-09 33 views
1

我的模型对象Reading有一个Location,但它不是数据库中的直接关系。在DB,这个“有”的关系或“参考”跨越3个表,如本喀嚓:References/has-a mapping through 3 tables

enter image description here

Reading映射到ComponentReading表,我想我的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(方法排序说明了什么,我想实现与ReadingLocation之间的关系但显然我无法像FNH那样简单地将它表达出来。

我不认为Join(代码甚至几乎是正确的,但它也试图沟通我之后的关系。

我希望有人能看到我想在这里做什么。你可以帮我吗?

This question is related.

回答

0

我认为你不能巢加入的方式。丑陋但实用的解决方案将是(未经测试):

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