所以,我在流畅的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。
我做错了什么?
答案 0 :(得分:0)
您能解释DTVehicleValueRange
表中的平均值列吗?这不是一个计算值(即不需要坚持它)?
您似乎在Vehicle
和DTValueRange
之间存在多对多关系,这当然不会使用加入进行映射,而是通过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");
});
}
}