[英]How to correctly map & update a self referencing entity with 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發布之后才添加component
的unique
屬性; 所以,除非有解決方法,我認為這是不可能的。
您是否可以將字段映射為復合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.