2010-08-31 8 views
0

Je travaille avec une base de données existante qui a la structure suivante. Changer le schéma de base de données est un dernier recours.NHibernate Mapping - many-to-one via la table

Products 
    Id 
    Name 

ParentProducts 
    ParentId 
    ChildId 

Je ne veux pas une entité pour ParentProducts, je donne les résultats suivants pour les enfants propriété (encore besoin de le tester, mais c'est le concept).

<bag name="Children" lazy="true" table="dbo.ParentProducts" cascade="save-update" inverse="true" > 
    <key column="[ChildId]"></key> 
    <many-to-many column="[ProductId]" class="Product" /> 
</bag> 

Ce que je suis aux prises avec est comment puis-je créer une propriété Parent? Je voudrais faire quelque chose comme le suivant, mais la table n'est pas un attribut valide pour plusieurs-à-un. Je pourrais créer un sac et ne regarder que le premier élément, mais c'est plutôt un hack.

Des idées? Merci

Répondre

2

La création d'un sac est la solution la plus simple. Et vous pouvez lui donner une interface propre:

protected virtual ICollection<Product> Parents { get; set; } 

public virtual Product Parent 
{ 
    get 
    { 
     return Parents.SingleOrDefault(); 
    } 
    set 
    { 
     Parents.Clear(); 
     Parents.Add(value); 
    } 
} 

Avec cela, le reste du code n'a pas besoin d'être au courant de la structure DB/cartographie.