代码OneToOne的NHibernate映射:不适用于唯一键

时间:2014-05-10 20:08:38

标签: 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 { 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设置根本无效。

请帮我弄清楚我的错误在哪里。

1 个答案:

答案 0 :(得分:0)

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

相关问题