2009-05-29 30 views
0

當在流利的nhibernate中自動映射聯接的子類時,我無法弄清楚如何爲聯接的子類提供主鍵。流利的NHibernate Automap加入子類設置密鑰

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; } 
} 

我想要位置擁有自己的ID「location_ id」與它自己的序列。然後我想通過address_id列映射到地址。

現在它生成的地址爲「addressid」作爲主鍵,這不是我想要的。我如何用automapping來改變它?

回答

0

我不確定你是否有聯合子類關係。也就是說,根據定義,聯接的子類與其父類具有相同的ID。例如,您可能會在數據庫中存儲Person實體以獲取通用「人員」信息,如名稱/年齡/等,然後存儲在不同表中的Employee子實體,並保存位置,工資和工作日期等數據。因此EmployeePerson的子類型並且要獲取完整的「Employee-Person」對象,則必須將它們的主鍵(例如SELECT * FROM Employee INNER JOIN Person ON Employee.Employee_id = Person.Person_id)加入到這兩個表中。

你是肯定關於你的關係型號嗎? Location真的是Address的子類型嗎?從你的財產名稱中稍微推敲一下,在我看來,這不是你想要的。看起來你可能在AddressOrganization之間有一個多對多的關係(也就是說,在同一地址可能有很多「組織」,而「組織」可能有很多地址),而「聯繫人」爲特定地址的組織。在這種情況下,您應該映射「組織」,「聯繫人」和另一個定義Address與「組織」之間關係的實體。

+0

是的,你是對的,我已經改變了我的代碼從這個模型。我只是希望這樣設置,這樣我就可以將它綁定到我的表單上,就像它是一個地址。我有一切工作,但它不完全是我想要的方式。感謝你的回答。 – 2009-05-29 21:02:21