2010-05-03 6 views
2

J'utilise NHibernate avec mon application ASP.Net MVC. J'écris des extensions (plugins) pour mon application. Et je charge dynamiquement ces plugins (à partir d'assemblages différents). Dans mon application de base j'ai beaucoup d'entités et de mappings définis (Utilisateur, Groupe, etc ...)Extension des mappages fluides nhibernate dans un autre assemblage

Je dois créer de nouvelles entités dans mes extensions, donc je crée un module News, donc j'ai besoin de créer Cartographie des nouvelles. Dans la table de la base de données, une clé étrangère est affectée à la table Utilisateur. Est-il possible que je peux modifier mon mappage utilisateur, il aura:

HasMany(x => x.News) 
    .KeyColumn("UserId") 
    .Inverse(); 

Ou la seule façon de le faire est de changer le code dans ma classe utilisateur et recompiler projet? Je ne suis pas un utilisateur avancé de NHibernate, donc toute aide sera appréciée. TIA.

+0

errr, vous souhaitez ajouter dynamiquement une propriété à l'utilisateur? –

+0

oui, quelque chose comme ça je pense;) Maby il y a une façon totalement différente d'y parvenir. – Jarek

+0

Les mappages sont créés une fois, au démarrage de l'application, connaissez-vous la structure de votre entité par ce point? –

Répondre

1

Fluent NHibernate pourrait aider

consultez les sections relatives Fluent Mapping ou, mieux encore, Auto Mapping

La cartographie automatique peuvent être remplacés pour des propriétés individuelles si vous ne pouvez pas utiliser la valeur par défaut. En outre, avec NHibernate, vous pouvez spécifier vos propres valeurs par défaut pour les clés primaires, les clés étrangères et autres.

+0

+1. Je sais l'automapping, mais comment puis-je ajouter la propriété News à la classe User? – Jarek

1

Vous pouvez automatiser plusieurs assemblages, par ex.

AutoMap.Assemblies(Assembly.GetExecutingAssembly(), 
        typeof(MyType).Assembly) 

permet de mapper l'assembly en cours d'exécution et l'assembly contenant "MyType".

Notez qu'il s'agit d'une fonctionnalité relativement nouvelle (19 février 2010) dans FNH, alors assurez-vous d'avoir une version récente.

Je ne sais pas comment cela fonctionnerait dans une situation de chargement dynamique, mais je pense que c'est plus un problème avec la façon dont vous obtiendrez la liste des assemblages (via la réflexion, probablement) que NHibernate en soi.

Questions connexes