流畅的NHibernate Automap加入子类设置密钥

时间:2009-05-29 17:43:12

标签: nhibernate fluent-nhibernate primary-key automapping

当在流畅的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”作为主键的位置,这不是我想要的。如何使用自动更改?

1 个答案:

答案 0 :(得分:0)

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

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

相关问题