![](/img/trans.png)
[英]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.