2010-01-15 4 views
25

Depuis très (très) longtemps, je cherchais un exemple pour implémenter correctement un mappage un-à-un avec Fluent NHibernate.Fluent NHibernate & one-to-one

La plupart des ressources que je trouve disent:

Je pense que vous voulez dire many-to-one

Cependant, personne ne donne en fait un exemple sur la façon de mettre en œuvre correctement l'un à un relation.

Alors, pouvez-vous donner un exemple de mappage un-à-un avec Fluent NHibernate?

Note: Je ne suis pas intéressé par les gens qui disent "quel est votre modèle, vous pourriez en fait besoin HasMany". Non, merci, j'ai simplement besoin d'un un-à-un exemple. Pour plus de précision, Je connais la syntaxe. C'est la seule chose que j'ai pu trouver en cherchant par moi-même. Ce que je cherche est un exemple plus complet, comprenant une configuration de base de données ((très) simple), et le mappage complet, de toutes les entités qui participent à la relation, ce qui, selon moi, aurait une taille raisonnable pour Stack Overflow.

Répondre

19

J'ai résolu mon problème.

J'ai aussi écrit un article peu détaillé sur ce problème, que vous pouvez trouver à: http://brunoreis.com/tech/fluent-nhibernate-hasone-how-implement-one-to-one-relationship/index.html

Vous trouverez un scénario dans lequel nous voulons un-à-un, le schéma de base de données que nous le voudrait, le code du modèle tel qu'il doit être conforme aux exigences de NHibernate, et le mappage Fluent correspondant à la situation.

+0

lien renvoie accès refusé erreur comme @ 2015/01/19 –

+0

Fixe. J'ai accidentellement cassé le lien il y a 2 jours quand j'ai changé quelques paramètres. Merci d'avoir signalé! –

+4

Veuillez publier le contenu correspondant dans la réponse. Les réponses à lien uniquement sont déconseillées. – BartoszKP

0

HasOne(x => x.Prop)

+0

Ceci n'est pas un exemple, c'est juste la syntaxe. Je cherche un exemple plus contextuel, expliquant la configuration de DB. –

+0

Vous avez dit que vous ne vouliez pas d'un HasMany, ce qui impliquait pour moi que vous sachiez en quoi consiste un one-to-one pour pouvoir le choisir par rapport à autre chose. –

+0

oui, je sais ce que c'est un one-to-one, mais je rencontre toujours des problèmes avec la cartographie des ID, autogénérés ID. –

2

This is the best example Je l'ai vu. J'espère que cela répond à vos besoins.

+0

S'il vous plaît mettre les informations les plus importantes dans le poste. Les réponses à lien uniquement sont déconseillées. – BartoszKP

3
these are the two classes. 

public class A 
{ 
    public virtual int Id {get;set;} 
    public virtual string P1 {get;set;} 
    public virtual string P2 {get;set;} 
    public virtual string P3 {get;set;} 
    public virtual B child { get; set; } 
} 

public class B 
{ 
    public virtual int Id {get;set;} 
    public virtual string P4 {get;set;} 
    public virtual string P5 {get;set;} 
    public virtual string P6 {get;set;} 
    public virtual A parent; 
}  

cela devrait être ajouté dans la configuration courante.

public AMap() 
    { 
     /* mapping for id and properties here */ 
     HasOne(x => x.child) 
      .Cascade.All(); 
    } 

    public BMap() 
    { 
     /* mapping for id and properties here */ 
     References(x => x.parent) 
      .Unique(); 
    }