3

コンポーネントを nhibernate の主キーとしてマップする方法と、可能であれば流暢な nhibernate でも同様にマップする方法を理解しようとしています。

問題のコンポーネントは、3D 座標の一意のセットです。オブジェクトは次のとおりです。

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

SpaceCoordinate は、次のように定義された構造体です。

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

SpaceCoordinate をコンポーネントにする流暢な nhibernate では、次のようなマッピング クラスを作成します。

public class SpaceLocationMap : ClassMapWithGenerator<SpaceLocation>
{
    public SpaceLocationMap()
    {
        References(x => x.AtLocation);
        Component<SpaceCoordinate>(x => x.Coordinates, m =>
        {
            m.Map(x => x.x);
            m.Map(x => x.y);
            m.Map(x => x.z);
        }).Unique();
    }
}

しかし、私が知りたいのは、 SpaceCoordinate コンポーネント全体を一意の制約を持つ主キーにする方法です。これを Nhibernate xml または流暢な nhibernate クラスマップでどのようにマッピングしますか?

4

2 に答える 2

2

今すぐ使用できるはずです

public class SpaceLocationMap : ClassMap<SpaceLocation>
{
    public SpaceLocationMap()
    {
        CompositeId(x => x.Coordinates)
            .KeyProperty(x => x.x)
            .KeyProperty(x => x.y)
            .KeyProperty(x => x.z);

        References(x => x.AtLocation);
    }
}
于 2011-11-23T13:36:46.363 に答える
2

NHibernate トランクで実行していない限り、これはできないと思います。uniqueon 属性は、component2.0 がリリースされるまで追加されませんでした。したがって、これを回避する方法がない限り、それは不可能だと思います。

代わりに、フィールドを複合 IDとしてマップできますか?

于 2009-02-02T00:55:11.467 に答える