簡體   English   中英

如何在NHibernate hbm xml(或在fluent-nhibernate類映射中)映射也是主鍵的組件?

[英]How do you map a component that is also a primary key in NHibernate hbm xml (or in a fluent-nhibernate class map)?

我試圖弄清楚如何將組件映射為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; }
}

在流暢的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類映射中映射它?

我相信,除非你在NHibernate主干上運行,否則你不能這樣做。 直到2.0發布之后才添加componentunique屬性; 所以,除非有解決方法,我認為這是不可能的。

您是否可以將字段映射為復合ID

現在應該可以使用

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM