代码OneToOne的NHibernate映射:不适用于唯一密钥
我有两个实体:代码OneToOne的NHibernate映射:不适用于唯一密钥,nhibernate,Nhibernate,我有两个实体: public class ServiceEvent { public long Id { get; set; } **public virtual Customer CustomerRef { get; set; }** public long ServiceId { get; set; } public string Test { get; set; } } public class Customer { public long Id
public class ServiceEvent
{
public long Id { get; set; }
**public virtual Customer CustomerRef { get; set; }**
public long ServiceId { get; set; }
public string Test { get; set; }
}
public class Customer
{
public long Id { get; set; }
**public virtual ServiceEvent Event { get; set; }**
public string TestCustomer { get; set; }
public long CustonerId { get; set; }
}
和映射:
public ServiceEventMap()
{
Id(x => x.Id, m => m.Generator(Generators.Native));
Property(x => x.ServiceId, m => {m.Unique(true); m.NotNullable(true);});
Property(x => x.Test);
OneToOne(x => x.CustomerRef, m => m.PropertyReference(typeof(Customer).GetPropertyOrFieldMatchingName("Event")));
}
public CustomerMap()
{
Id(x => x.Id, m => m.Generator(Generators.Native));
Property(x => x.CustonerId);
Property(x => x.TestCustomer);
ManyToOne(x => x.Event, m =>
{
m.PropertyRef("ServiceId");
m.Column(mc =>
{
mc.Name("service_id");
mc.NotNullable(true);
});
m.ForeignKey("fk_service_event_customer");
});
}
我用了一个例子。正如示例中所描述的,我在一侧建立了多对一关系,在另一侧建立了“虚拟”一对一关系
当主键在两个表中的值相同时,它可以正常工作。但是我需要这个关系基于ServiceId
字段,而不是主键
目前,我在选择数据方面有一个问题。从数据库读取的所有ServiceEvent
对象在CustomerRef
属性中都具有null
我在数据库中有以下数据:
客户表
id |服务| id |测试|客户|客户| id
7 | 55 |测试管柱| 444534543
服务事件表
id |服务| id |测试
2 | 55 |另一串
当我阅读Customer
时,它有到ServiceEvent
对象的正确链接
一对一映射中的PropertyReference
设置似乎根本不起作用
请帮助我找出我的错误所在。一对一关系始终共享主键,如果不是这样,您可以有多个实体与同一个主键相关。在其中一个实体(从属实体)中,它既是主键又是外键,而在另一个实体(主实体)中,它只是主键