Как вы сопоставляете компонент, который также является первичным ключом в NHibernate hbm xml (или в карте классов fluent-nhibernate)? - PullRequest
3 голосов
/ 01 февраля 2009

Я пытаюсь выяснить, как сопоставить компонент в качестве первичного ключа в nhibernate и, если возможно, также в беглом nhibernate.

Компонент, о котором идет речь, представляет собой уникальный набор трехмерных координат, вот объект:

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

В беглом nhibernate, чтобы сделать SpaceCoordinate компонентом, я создал бы класс отображения следующим образом:

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?

Ответы [ 2 ]

2 голосов
/ 23 ноября 2011

теперь это возможно, используя

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);
    }
}
2 голосов
/ 02 февраля 2009

Я верю, что если вы не используете NHibernate, вы не сможете этого сделать. Атрибут unique в component не добавлялся до выпуска 2.0; так что, если нет способа обойти это, я не думаю, что это возможно.

Можно ли вместо этого сопоставить поля как составной идентификатор ?

...