Join Mapping中的HasMany关系

时间:2010-03-18 14:17:19

标签: fluent-nhibernate join nhibernate-mapping

所以,我在流畅的nhibernate中遇到问题。我想使用连接映射来展平中间表:这是我的结构:

[Vehicle]
VehicleId
...

[DTVehicleValueRange]
VehicleId
DTVehicleValueRangeId
AverageValue
...

[DTValueRange]
DTVehicleValueRangeId
RangeMin
RangeMax
RangeValue

请注意,DTValueRange没有VehicleID。我想将DTVehicleValueRange压平到我的Vehicle类中。对于AverageValue,Tg可以正常工作,因为它只是一个普通值,但我似乎无法使ValueRange集合正确映射。

    public VehicleMap()
    {
        Id(x => x.Id, "VehicleId");
        Join("DTVehicleValueRange", x =>
        {
            x.Optional();
            x.KeyColumn("VehicleId");
            x.Map(y => y.AverageValue).ReadOnly();
            x.HasMany(y => y.ValueRanges).KeyColumn("DTVehicleValueRangeId"); // This Guy
        });
    }

如果HasMany映射在Join中,它似乎没有做任何事情。如果它在Join之外,我指定了表,它会映射,但是nhibernate会尝试使用VehicleID,而不是DTVehicleValueRangeId。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

您能解释DTVehicleValueRange表中的平均值列吗?这不是一个计算值(即不需要坚持它)?

您似乎在VehicleDTValueRange之间存在多对多关系,这当然不会使用加入进行映射,而是通过HasManyToMany调用进行映射。< / p>

答案 1 :(得分:0)

今天使用Map来创建一个类似的问题。生成的SQL显示它尝试执行HasMany&lt;&gt;基于ParentThing的Id而不是WorkThing(你遇到的同样问题)的连接内部

经过多次头到桌的映射后,发现将propertyref添加到hasmany解决了它。

public class ThingMap : ClassMap<WorkThingView> { 
     public ThingMap() {
                ReadOnly();
                Table("ParentThing");
                Id(x => x.ParentThingId);
                Map(x => x.ParentName);
                Join("WorkThing", join => {
                    join.KeyColumn("ParentThingId");
                    join.Map(m => m.FooCode);
                    join.Map(m => m.BarCode);
                    join.Map(x => x.WorkThingId);
                    join.HasMany(x => x.WorkThingCodes)
                        .Table("WorkThingCode").KeyColumn("WorkThingId").PropertyRef("WorkThingId")
                        .Element("WorkThingCode");
                });
            }
}