Как автоматизировать коллекцию компонентов в Fluent NHibernate? - PullRequest
1 голос
/ 10 сентября 2010

У меня есть TrackLog, который содержит коллекцию точек GPS как TrackPoint объект:

public class TrackPoint
{
    public virtual int Id { get; set; }
    public virtual List<TrackPoint> TrackPoints { get;set; }
}

public class TrackLog
{
    public virtual double Latitude { get; set; }
    public virtual double Longitude { get; set; }
    public virtual DateTime Timestamp { get; set; }
}

TrackPoint является компонентом, и я создал IAutomappingConfiguration, который говорит FNH отображать его как таковой. Однако, когда я пытаюсь запустить мою программу, FNH выдает следующее исключение:

Ассоциация ссылается на несопоставленный класс: TestProject.Components.TrackPoint

Как мне сопоставить коллекцию компонентов?

Ответы [ 2 ]

1 голос
/ 11 сентября 2010

Я разобрался в своей проблеме.Рафаэль, в ответ на ваш вопрос, TrackLog имеет коллекцию TrackPoints.Обычно в этом случае TrackPoint будет сущностью, но поскольку TrackPoint не должно существовать, если оно не принадлежит TrackLog, я решил сделать его компонентом, который связывает его время жизни с его родителем TrackLog.

Оказывается, проблема, с которой я столкнулся, заключалась в том, что, несмотря на то, что я создал автоматическое переопределение, оно не работало:

internal class TrackLogOverride : IAutoMappingOverride<TrackLog>
{
    public void Override(AutoMapping<TrackLog> mapping)
    {
        mapping.HasMany(x => x.TrackPoints).Component(x =>
            {
                x.Map(m => m.Latitude);
                x.Map(m => m.Longitude);
                x.Map(m => m.Timestamp);
            });
    }
}

Оказалось, что мне нужно было сделатькласс переопределения public для FNH, чтобы использовать их, потому что я использовал FNH в другой сборке.

0 голосов
/ 10 сентября 2010

Самая первая вещь, которую нужно изменить, это изменить тип List на IList.Причина в том, что NHibernate должен внедрить свой собственный тип коллекции, а не собственный C # List.

. Что я не понимаю, так это TrackPoint.Вы говорите, что это компонент, потребляющий сам по себе?Не могли бы вы дать нам больше понимания?Я в замешательстве.

Скажем, у меня есть класс Track, который использует TrackPoint в качестве компонента:

public class TrackMap : ClassMap<TrackPoint>
{
 Id(x => x.Id);

 Component(x => x.TrackPoint, m =>
 {
      m.Map(x => x.Id);

         // Try one of the following (not sure):
         m.Map(x => x.TrackPoints);
         m.HasMany(x => x.TrackPoints);
 } 
}

Помогает ли это?

...