2009-05-29 13 views
0

Lors de l'automappage d'une sous-classe jointe dans nhibernate fluide, je ne peux pas comprendre comment donner à la sous-classe jointe une clé primaire.Fluid NHibernate Automap Joined Sous-classe Définition de la clé

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

Je souhaite que Location ait son propre identifiant "location_id" avec sa propre séquence. Ensuite, je veux que mappé à l'adresse via une colonne address_id.

En ce moment, il génère l'emplacement avec "addressid" comme clé primaire, ce qui n'est pas ce que je veux. Comment puis-je changer cela avec l'automapping?

Répondre

0

Je ne suis pas sûr que vous ayez une relation join-subclass. Autrement dit, une sous-classe jointe a par définition le même ID que sa classe parente. Par exemple, vous pouvez avoir une entité Person stockée dans votre base de données pour des informations génériques "people" comme name/age/etc puis une sous-classe Employee qui est stockée dans une table différente et qui contient des données telles que le poste, le salaire et les dates d'emploi . Donc un Employee est un sous-type de Person et pour obtenir l'objet complet "Employee-Person", vous devez joindre les deux tables sur leurs clés primaires (par exemple SELECT * FROM Employee INNER JOIN Person ON Employee.Employee_id = Person.Person_id).

Êtes-vous sûr sur votre modèle relationnel ici? Est-ce que Location est vraiment un sous-type de Address? En déduisant un peu de vos noms de propriété, il me semble que ce n'est pas ce que vous voulez. Il semble que vous ayez probablement un nombre plusieurs à plusieurs entre un Address et un Organization (c'est-à-dire qu'il peut y avoir plusieurs "organisations" à la même adresse et une "organisation" peut avoir beaucoup d'adresses), avec une "personne de contact" pour l'organisation à une adresse spécifique. Dans ce cas, vous devez mapper "organisation", "contact" et une autre entité qui définit la relation entre Address et "organisation".

+0

Oui, vous avez raison, j'avais déjà changé mon code de ce modèle. Je voulais juste qu'il soit configuré de cette façon afin que je puisse lier sur ma forme comme si c'était une adresse. J'ai tout travaillé, même si ce n'est pas exactement comme je le voulais. Merci d'avoir répondu. –