我有两个实体:
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");
});
}
我使用了NOtherDev中的一个例子。正如在例子中描述的那样,我在一方面建立了多对一的关系,并且虚拟的#34;另一方面是一对一的关系。
如果主键在两个表中具有相同的值,则它可以正常工作。但我需要这个关系基于ServiceId
字段,而不是主键。
目前我在选择数据方面遇到了问题。从数据库中读取的所有ServiceEvent
个对象在null
属性中都有CustomerRef
。
我在数据库中有以下数据:
客户表
id | service_id | test_customer | custoner_id
7 | 55 |测试字符串| 444534543
service_event表
id | service_id | test
2 | 55 |另一个字符串
当我正在阅读Customer
时,它与ServiceEvent
对象有正确的链接。
似乎一对一映射中的PropertyReference
设置根本无效。
请帮我弄清楚我的错误在哪里。
答案 0 :(得分:0)
一对一关系总是共享主键,如果不是这样,您可以拥有多个与之相关的实体。在其中一个实体(从属)中,它既是主键,也是外键,而在另一个(主键)中它只是主键。