2

私は NHibernate と Fluent NHibernate を使用して、ドメイン オブジェクトのマッピング ファイルを作成しています (回答が流暢な NHibernate または xml hbm 構文を使用しているかどうかは気にしません)。また、ドメイン オブジェクト内のコンポーネントを表す一連の列が一意であることを指定する方法がわかりません。

ドメイン オブジェクトは次のとおりです。

public class SpaceLocation
{
        public SpaceCoordinate Coordinates { get; set; }
        public SpaceObject AtLocation { get; set; }
}

ここに私が問題を抱えているコンポーネントがあります:

public struct SpaceCoordinate
{
        public int x { get; set; }
        public int y { get; set; }
        public int z { get; set; }
}

SpaceObject AtLocationこの質問の目的上、心配しないでください。

したがって、SpaceCoordinate からコンポーネントを作成する方法はわかっていますが、同じ座標セットの挿入が重複しないようにしたいと考えています。そのためには、コンポーネント全体をユニークなものにしたいと考えています。

私が行こうとしている方向性を理解してもらうために、マッピング クラスについて私が持っているものを示します。

public class SpaceLocationMap : ClassMapWithGenerator<SpaceLocation>
    {
        public SpaceLocationMap()
        {

            Component<SpaceCoordinate>(x => x.Coordinates, m => 
            {
                m.Map(x => x.x);
                m.Map(x => x.y);
                m.Map(x => x.z);
            });
        }
    }

この Fluent NHibernate マッピングの問題は、一意の制約を SpaceCoordinate の値にまとめて適用しないことです。それぞれを個別に一意に設定しようとしているわけではないことに注意してください。これは制限が厳しすぎるでしょう。

では、これを hbm または fluent マップ ファイルでどのようにマッピングしますか?

読んでくれてありがとう!!

4

2 に答える 2

2

m4bwav は hbm マッピングで正しかった。ただし、質問を書いた時点では、Fluent NHibernate はこれをサポートしていませんでした。Uniqueコンポーネント マッピングにメソッドを追加する修正をコミットしました。

Component<SpaceCoordinate>(x => x.Coordinates, m => 
{
  m.Map(x => x.x);
  m.Map(x => x.y);
  m.Map(x => x.z);
}).Unique();

そのため、Fluent NHibernate のコピーを更新する必要があります。何らかの理由でこれを行うことができない場合は、SetAttributeメソッドを使用してハッキングできます。

Component<SpaceCoordinate>(x => x.Coordinates, m => 
{
  m.Map(x => x.x);
  m.Map(x => x.y);
  m.Map(x => x.z);
}).SetAttribute("unique", "true");
于 2009-01-26T16:15:23.490 に答える
0

答えは次のようなものだと思います。

<class name="SpaceLocation" table="SpaceLocation">
    <property name="AtLocation" type="SpaceObject"/>
    <component name="Coordinates" class="SpaceCoordinate" unique="true">
        <property name="x"/>
        <property name="y"/>
        <property name="z"/>
    </component>
</class>

しかし、私はまだチェックしていません。流暢なnhibernateでそれを行う方法は?

于 2009-01-26T15:32:13.360 に答える