我有两个实体:
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的一个例子。正如在例子中所描述的,我在一边建立了多对一的关系,在另一边建立了“虚拟的”一对一的关系。
当主键在两个表中具有相同的值时,它可以很好地工作。但我需要这种关系是基于ServiceId
字段,而不是主键。
目前,我对数据的选择有问题。从数据库中读取的所有ServiceEvent
对象都具有CustomerRef
属性中的null
。
我在数据库中有以下数据:
客户表
id |service_id |test_customer |custoner_id
测试字符串7\55\x=444534543
service_event表
id |service_id _x检验
2\55另一个字符串
当我阅读Customer
时,它有到ServiceEvent
对象的正确链接。
在一对一映射中的PropertyReference
设置似乎根本不起作用。
请帮我找出我的错误在哪里。
发布于 2014-05-14 23:57:58
一对一的关系总是共享主键,如果不是这样的话,您可以有几个与相同的实体相关。在其中一个实体(依赖方)中,它既是主键又是外键,而在另一个实体(主键)中,它只是主键。
https://stackoverflow.com/questions/23585771
复制