2010-08-10 14 views
0

je les tableaux suivants:NHibernate - entité composite, table joignant cartographié par une autre entité

A 
-- 
Id : int 
SomeString : varchar(20) 

B 
-- 
Id : int 
BString: nvarchar(10) 
AId : int // FK to A 

J'ai une entité A qui est déjà mis en correspondance avec la table A.

Pour l'entité B, J'essaie de faire un composite pour avoir toutes les données de B, ainsi que les champs de A. Les champs de A ne devraient pas être modifiables via B, ils sont juste là pour le cas d'utilisation.

Je suis en train de construire ma cartographie (courant) B comme ceci:

Table("B"); 
    Join(
    "A" 
    m => 
     { 
     m.KeyColumn("AId"); 
     m.Inverse(); 
     m.Map(p => p.SomeString); 
     } 
); 
    Map(p => p.BString); 

Le problème se produit lorsque je tente d'exporter le schéma; il dit que la table A existe déjà. Des idées, ou ça ne marche pas du tout?

Merci

Répondre

2

Ceci est une mauvaise idée. Vous devriez simplement référencer A.

Si vous ne voulez pas changer la référence de A à B, il suffit de la rendre privée et d'exposer uniquement des getters pour ses propriétés.

+0

C'est ce que j'ai fini par faire. Je ne vois pas pourquoi ce serait une mauvaise idée (sauf qu'il semble que NHibernate ne semble pas vous laisser le faire). Rejoindre une table et définir ces propriétés en lecture seule dans le mappage de la jointure ne pose pas de problème conceptuel et élimine le besoin de charger un autre modèle assez complexe pour obtenir quelques propriétés. Dans notre cas, cet autre modèle ne peut pas être privé car nous utilisons Fluent pour faire nos mappings. – Andy