2009-05-29 3 views
0

Beim automapping einer verbundenen Unterklasse in fließenden Nhibernate kann ich nicht herausfinden, wie die verbundene Unterklasse einen Primärschlüssel geben.Fließende NHibernate Automap Joined Sub-Klasse Setzen des Schlüssels

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

Ich möchte Ort seine eigene ID „location_ id“ mit einer eigenen Sequenz haben. Dann möchte ich, dass zugeordnet über eine address_id-Spalte zu adressieren.

Momentan erzeugt es den Ort mit "addressid" als Primärschlüssel, was ich nicht will. Wie ändere ich das mit dem Auto-Mapping?

Antwort

0

Ich bin mir nicht sicher, dass Sie eine verbundene Unterklasse Beziehung haben. Das heißt, eine verbundene Unterklasse hat definitionsgemäß dieselbe ID wie ihre Elternklasse. Zum Beispiel könnten Sie eine Person Entität in Ihrer Datenbank für generische "Personen" Informationen wie Name/Alter/etc gespeichert haben und dann eine Employee Unterklasseneinheit, die in einer anderen Tabelle gespeichert ist und Daten wie Position, Gehalt und Beschäftigungsdaten enthält . So ein Employee ist ein Subtyp von Person und um das vollständige "Mitarbeiter-Person" -Objekt zu erhalten, müssen Sie die beiden Tabellen auf ihren Primärschlüsseln (z. B. SELECT * FROM Employee INNER JOIN Person ON Employee.Employee_id = Person.Person_id) verbinden.

Sind Sie sicher über Ihr relationales Modell hier? Ist Location wirklich ein Subtyp von Address? Wenn ich ein wenig von Ihren Eigentumsnamen höre, scheint es mir, dass dies nicht das ist, was Sie beabsichtigen. Es scheint, als ob Sie wahrscheinlich eine Viele-zu-Viele zwischen einer Address und einer Organization haben (das heißt, es kann viele "Organisationen" an der gleichen Adresse geben und eine "Organisation" kann viele Adressen haben), mit einer "Kontaktperson" für die Organisation an einer bestimmten Adresse. In diesem Fall sollten Sie "Organisation", "Kontakt" und eine andere Entität zuordnen, die die Beziehung zwischen Address und "Organisation" definiert.

+0

Ja, Sie haben Recht, ich hatte meinen Code bereits von diesem Modell entfernt. Ich wollte nur, dass es so eingerichtet wurde, dass ich es auf meinem Formular binden konnte, als wäre es eine Adresse. Ich habe alles in Ordnung, obwohl es nicht so ist, wie ich es wollte. Danke für die Antwort. –