2010-06-11 4 views
0

J'essaie de relier 2 éléments. J'ai une table qui est simplement un champ d'identification, et puis 2 colonnes pour l'identification d'article à rapporter. Je veux que ce soit une relation bidirectionnelle - c'est-à-dire, si les éléments apparaissent deux fois dans la table, je veux seulement une connexion de relation en arrière.Articles relatifs à la cartographie Nhibernate courants

Alors, voici mon article:

public class Item 
{ 
    public virtual Guid ItemId {get; set;} 

    public virtual string Name {get; set;} 

    public virtual IList<Item> RelatedItems {get; set;} 
} 

Le tableau pour relier les éléments se présente comme suit:

CREATE TABLE RelatedItems 
(
    RelatedItemId uniqueidentifier DEFAULT(NEWID()) NOT NULL, 
    ItemId   uniqueidentifier NOT NULL, 
    RelatedId  uniqueidentifier NOT NULL, 

    CONSTRAINT PK_RelatedItems PRIMARY KEY CLUSTERED (RelatedItemId) 
) 

Quelle est la meilleure façon de cartographier cette connexion?

Répondre

0

Je devais le faire à la dure (lire HACK).

HasManyToMany(x => x.RelatedTo) 
       .Table("RelatedItems") 
       .ParentKeyColumn("ItemId") 
       .ChildKeyColumn("RelatedItemId"); 

HasManyToMany(x => x.RelatedToMe) 
       .Table("RelatedItems") 
       .ChildKeyColumn("ItemId") 
       .ParentKeyColumn("RelatedItemId"); 

Puis dans ma classe j'ai une lecture seule appelée collection RelatedItems qui relie les deux listes et de sélectionner des éléments distincts à revenir.

1

Vous devez utiliser un mappage "HasMany". Je pense que ce qui suit peut fonctionner:

public class Item : ClassMap<Item> 
{ 
    Id(x=>x.Id) 
    .Column("ItemId"); 

    Map(x=>x.Name); 

    HasMany(x=>x.RelatedItems) 
    .KeyColumn("RelatedId") 
    .Table("RelatedItems") 
    .LazyLoad() 
    .AsList();  
} 

Vous pouvez toujours utiliser une convention pour le champ Id. Et pensez aux options de suppression en cascade de la collection HasMany.

+0

Le problème est que la relation ne fonctionne que d'une façon avec cela. J'en ai besoin pour travailler dans les deux sens. – Josh

Questions connexes