2009-05-21 6 views
2

En fait, la question est plus complexe que ce qui est décrit. Je suis novice sur nhibernate et je veux mapper une table avec des colonnes de clés étrangères. Dans la plupart des échantillons de nhibernate, les affectations de colonnes de clé étrangère sont généralement implémentées en définissant l'entité référencée. Je veux dire, si j'ai une colonne CategoryId alors j'ai besoin d'une propriété Category et dans les exemples que j'ai regardés, la propriété Category est généralement définie. Dans mon cas, je ne veux pas définir la propriété de l'entité mais la propriété de la clé étrangère à la place. Je ne veux pas définir la propriété category lorsque j'ai essayé de sauvegarder l'entité Post comme l'exemple ci-dessous.Comment mapper une colonne de clé étrangère dans nhibernate?

Post post = new Post { Content = "content", Category = aCategoryEntity }; 
session.Save(post); 

L'exemple ci-dessous est la façon dont je veux mettre en œuvre.

Post post = new Post { Content = "content", CategoryId = 3 }; 
session.Save(post); 

Comment puis-je me débarrasser de cela?

+0

Si vous êtes toujours coincé, pourquoi ne pas poster votre cartographie. –

Répondre

1

Session.Load était la solution que j'ai utilisée ici.

Post post = new Post 
{ 
    Content = "content", 
    Category = Session.Load<Category>(categoryId) 
}; 

session.Save(post); 
0

Votre entité "Publier" n'a pas besoin de CategoryId et d'une propriété Catégorie. En règle générale, vous mappez également la catégorie, et votre mappage de post relierait les deux à l'aide de la clé étrangère.

Vous pouvez essayer quelque chose comme ça alors

session.Save(new Post(){ Category = new Category(){ Id = 3 } }); 

Hope this helps.

+0

Votre suggestion est dans mon esprit, mais je suis à la recherche d'une solution exacte pour cela. En passant, j'utilise fluent-nhibernate pour les mappings. Je suppose qu'il y a une méthode ou quelque chose d'autre que j'ai raté qui pourrait faire quelque chose comme ça. –

+0

Vous devez penser à la réponse de Liam. Le code n'a aucun moyen de savoir si l'identifiant de la catégorie est valide, donc il viole la clé étrangère et déclenche une exception. –

+0

Habituellement, lorsque vous avez l'impression de travailler contre une technologie, c'est parce que vous l'êtes. Si vous avez la possibilité de reconcevoir pour pouvoir travailler avec un objet Catégorie en tant que propriété de Post, cela vous évitera beaucoup de maux de tête. :) –

0

Je ne sais pas si cela est possible pour NHibernate. Le but d'un ORM est de traiter des objets, pas des clés étrangères RDMS.

+0

Je sais, ce n'est pas une bonne pratique et c'est exceptionnel pour ORM mais j'en ai besoin quand même. –

Questions connexes