当在流畅的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”作为主键的位置,这不是我想要的。如何使用自动更改?
答案 0 :(得分:0)
我不确定你是否有一个连接子类关系。也就是说,根据定义,连接的子类具有与其父类相同的ID。例如,您可能在数据库中存储了一个Person
实体,用于存储名称/年龄/等通用“人员”信息,然后是Employee
子类实体,它存储在不同的表中并保存数据,如职位,工资和就业日期。因此Employee
是Person
的子类型,要获得完整的“Employee-Person”对象,您必须在其主键上加入两个表(例如SELECT * FROM Employee INNER JOIN Person ON Employee.Employee_id = Person.Person_id
)。
您确定关于您的关系模型吗? Location
真的是Address
的子类型吗?从您的房产名称中推断一下,在我看来,这不是您想要的。看起来你可能在Address
和Organization
之间有多对多(也就是说,在同一地址可能有很多“组织”,而“组织”可能有很多地址),在特定地址与组织的“联系人”。在这种情况下,您应该映射“组织”,“联系人”以及定义Address
和“组织”之间关系的另一个实体。