Соотношение HasMany внутри присоединения Mapping - PullRequest
3 голосов
/ 18 марта 2010

Итак, у меня проблема с отображением в беглом nhibernate. Я хочу использовать сопоставление соединений, чтобы сгладить промежуточную таблицу: Вот моя структура:

[Vehicle]
VehicleId
...

[DTVehicleValueRange]
VehicleId
DTVehicleValueRangeId
AverageValue
...

[DTValueRange]
DTVehicleValueRangeId
RangeMin
RangeMax
RangeValue

Обратите внимание, что у DTValueRange нет идентификатора VehicleID. Я хочу добавить DTVehicleValueRange в свой класс Vehicle. Tgis отлично работает для AverageValue, поскольку это просто обычное значение, но я не могу заставить коллекцию 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. Если он находится вне соединения, и я указываю таблицу, он сопоставляется, но nhibernate пытается использовать VehicleID, а не DTVehicleValueRangeId.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 29 марта 2013

Сегодня столкнулся с похожей проблемой, используя карту для создания вида. Сгенерированный SQL показал, что он пытается выполнить HasMany <> внутри объединения на основе идентификатора ParentThing, а не 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");
                });
            }
}
0 голосов
/ 15 апреля 2010

Можете ли вы объяснить столбец среднего значения в таблице DTVehicleValueRange? Разве это не расчетное значение (т. Е. Не нужно его сохранять)?

Похоже, что у вас есть отношения многие-ко-многим между Vehicle и DTValueRange, которые, конечно, не будут сопоставлены с объединением, а скорее с вызовом HasManyToMany.

...