代码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
设置似乎根本不起作用

请帮助我找出我的错误所在。

一对一关系始终共享主键,如果不是这样,您可以有多个实体与同一个主键相关。在其中一个实体(从属实体)中,它既是主键又是外键,而在另一个实体(主实体)中,它只是主键