0

在流利的 nhibernate 中自动映射连接的子类时,我不知道如何为连接的子类提供主键。

public class Address:Entity {
    public virtual string Address1 { get; set; }
    public virtual string Address2 { get; set; }
    public virtual string City { get; set; }
    public virtual string State { get; set; }
    public virtual string Zip { get; set; }
    public virtual string Phone { get; set; }
    public virtual string Fax { get; set; }
    public virtual IList<Location> Locations { get; set; }
}

public class Location:Address {
    public virtual Address BillingAddress { get; set; }
    public virtual string OfficeHours { get; set; }
    public virtual string PatientAgeRestrictions { get; set; }
    public virtual bool WheelchairAccess { get; set; }
    public virtual string ContactPerson { get; set; }
    public virtual string ContactEmail { get; set; }
    public virtual string ContactPhone { get; set; }
    public virtual string ContactFax { get; set; }
    public virtual string TaxId { get; set; }
}

我希望 Location 有它自己的 id “location_id”和它自己的序列。然后我希望通过 address_id 列映射到地址。

现在它正在生成以“addressid”为主键的位置,这不是我想要的。如何通过自动映射更改此设置?

4

1 回答 1

0

我不确定你是否有加入子类的关系。也就是说,根据定义,连接的子类与其父类具有相同的 ID。例如,您可能Person在数据库中存储了一个实体,用于存储通用“人”信息,如姓名/年龄/等,然后是一个Employee子类实体,该实体存储在不同的表中并保存职位、薪水和就业日期等数据。所以 anEmployee是一个子类型,Person并且要获得完整的“Employee-Person”对象,您必须在两个表的主键上连接它们(例如SELECT * FROM Employee INNER JOIN Person ON Employee.Employee_id = Person.Person_id)。

确定你的关系模型在这里吗?真的Location是 的亚型Address吗?从您的财产名称中推断出一点,在我看来,这不是您想要的。Address看起来你可能在 an和 an之间有一个多对多Organization(也就是说,同一个地址可能有许多“组织”,一个“组织”可能有许多地址),有一个“联系人”在特定地址组织。Address在这种情况下,您应该映射“组织”、“联系人”以及定义与“组织”之间关系的另一个实体。

于 2009-05-29T19:44:07.323 回答