NHibernate Fluent - Comment mapper la colonne de clé étrangère comme une propriété

Je suis sûr que c'est une question simple, mais de considérer les éléments suivants:
J'ai une référence entre la compagnie et le secteur comme suit:

public class Company {
    public Guid ID { get; set; }
    public Sector Sector { get; set; }
    public Guid SectorID { get; set; }
}

public class Sector {
    public Guid ID { get; set; }
    public string Name { get; set; }
}

Ok. Ce que je veux, c'est la SectorID de l'objet de la Société à être peuplée après je vais:

(new Company()).Sector = new Sector() { Name="asdf" }

et de faire un flush.

La cartographie, je suis en utilisant gentiment crée une colonne supplémentaire dans la base de données appelée Sector_Id dans la table de la Société, mais ce n'est pas disponible en tant que propriété de l'Entreprise. Je veux le SectorID propriété d'être rempli.

La cartographie, je suis actuellement à l'aide de la CompanyMap est

References(c => c.Sector).Cascade.All();

Quelqu'un a une idée?


Merci pour votre réponse.
Malheureusement, si je fais la deuxième option (réglage de la colonne nom de la colonne à être la même que la propriété, ou un ensemble Map(x => x.SectorID, "Sector_Id") puis j'obtiens l'erreur:

Système.IndexOutOfRangeException: index non Valide 7 pour cette SqlParameterCollection avec Count=7.

J'ai peut-être de faire la première option, mais je suis préoccupé par une requête supplémentaire sera déclenché lorsque vous appelez la SectorID obtenir qu'il obtient le Secteur de la db (sauf s'il est désireux chargé qui est un peu compliqué).

Je suis surpris de voir qu'il n'est pas facile de répondre à cela.


WOW!
Si j'utilise

public virtual Guid SectorID
{
    get { return Sector.ID;
}   

puis nhibernate est assez intelligent pour savoir que l'Sector_id colonne dans l'Organisation de la requête est en fait la même chose en tant que Secteur.ID et il revient cette sous le capot. Il n'a pas à envoyer une requête supplémentaire, même si vous le lazy load. Je suis impressionné!


Suivi... Il semble que hibernate n'est pas vraiment écrit pour être en mesure de mapper la colonne de clé étrangère dans les objets. Même si cela peut être un peu de douleur dans les serveurs web frontaux, cela fait sens car c'est vraiment une persistance qui ne concernent pas vraiment un objet de préoccupation.
Je suis à l'aide de asp.net MVC et ont écrit un modèle de liaison personnalisé qui prendra une zone de saisie de nom de Contact (plutôt que ContactID), les nouvelles en place d'un nouveau Contact avec l'ID de ce qui est dans le texbox, et ensuite l'appliquer à la propriété du Modèle. Cela permet de contourner le problème avec des listes déroulantes dans les serveurs web frontaux. Affichera le code si quelqu'un est intéressé.

OriginalL'auteur | 2009-04-01