2009-02-01 69 views
3

我想弄清楚如何在nhibernate中將組件映射爲主鍵,並且如果可能的話,還要使用流暢的nhibernate。如何映射也是NHibernate hbm xml(或者流利的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(); 
    } 
} 

但是我w我們想知道的是如何使SpaceCoordinate組件作爲一個整體成爲唯一約束的主鍵。我如何將它映射到Nhibernate xml或者流利的nhibernate類圖中?

回答

2

我相信,除非你在NHibernate主幹上運行,否則你不能這樣做。直到2.0發佈後才加入component上的unique屬性;所以除非有解決辦法,否則我認爲這是不可能的。

您是否可以將字段映射爲composite-id

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