1

オブジェクト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はコンポーネントであり、IAutomappingConfigurationFNH にそのようにマッピングするように指示する を作成しました。ただし、プログラムを実行しようとすると、FNH は次の例外を吐き出します。

関連付けがマッピングされていないクラスを参照しています: TestProject.Components.TrackPoint

コンポーネントのコレクションをマップするにはどうすればよいですか?

4

2 に答える 2

1

私は自分の問題を理解しました。Rafael は、あなたの質問に答え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のオーバーライド クラスを作成する必要があることがわかりました。

于 2010-09-10T20:37:47.047 に答える
0

最初に変更する必要があるListは、タイプをに変更することIListです。ニーズの理由は、NHibernate が C# 独自の ではなく、独自のタイプのコレクションを注入する必要があるためListです。

私が理解していないのは、トラックポイント自体です。それ自体を消費する成分ということですか?もっと詳しく教えていただけますか?よくわかりません。

TrackPoint をコンポーネントとして使用するクラス Track があるとします。

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

これは役に立ちますか?

于 2010-09-10T12:24:31.270 に答える