2010-03-15 3 views
0

J'espère que quelqu'un pourra m'aider à mapper une base de données existante. Le problème que je décris ici a tourmenté les autres, mais j'ai été incapable de trouver une bonne solution sur le web. AVIS DE NON-RESPONSABILITÉ: il s'agit d'une base de données héritée. Je n'ai aucun contrôle sur les clés composites . Ils sucent et ne peuvent pas être changé, peu importe que vous me dire qu'ils sucent. Je ne peux pas ajouter de clés de substitution non plus. Merci de ne pas suggérer l'un ou l'autre car ce ne sont pas des options.NHibernate Legacy Mappages de base de données impossible?

J'ai 2 tables, toutes deux avec des touches composées. L'une des clés d'une table est utilisée comme partie de la clé pour obtenir une collection de l'autre table . En bref, les touches ne correspondent pas entièrement entre la table. ClassB est utilisé partout Je voudrais éviter d'ajouter des propriétés pour dans l'intérêt de cette cartographie si possible.

public class ClassA 
{ 
    //[PK] 
    public string SsoUid; 

    //[PK] 
    public string PolicyNumber; 

    public IList<ClassB> Others; 

    //more properties.... 

} 

public class ClassB 
{ 
    //[PK] 
    public string PolicyNumber; 

    //[PK] 
    public string PolicyDateTime; 

    //more properties 
} 

Je veux obtenir une instance de ClassA et obtenir toutes les lignes ClassB qui correspondent à PolicyNumber. J'essaie d'obtenir quelque chose avec un un-à-plusieurs, mais je me rends compte que cela peut techniquement être un de plusieurs-à-plusieurs que je suis juste traiter comme un-à-plusieurs.

J'ai essayé d'utiliser une classe d'association mais je n'ai pas été assez loin pour voir si cela fonctionne. Je suis nouveau à ces mappings plus complexes et je cherche pour des conseils. Je suis ouvert à presque toutes les idées.

Merci, Corey

Répondre

1

La meilleure façon de gérer les schémas de base de données de l'héritage de cartographie est d'ajouter une substitution clé primaire générée (à savoir l'identité dans SQL Server) à chaque table de base de données et modifier vos clés primaires composites existantes à des contraintes uniques . Cela vous permet de conserver vos clés étrangères existantes et facilite le mappage NHibernate.

Si cela n'est pas possible, vous pouvez utiliser property-ref dans vos mappages pour cela. Editer: Vous pouvez toujours revenir à un modèle de domaine anémique. C'est-à-dire, mapper chaque classe mais exclure les relations. Vous auriez une méthode d'accès aux données pour obtenir ClassA par clé, et une pour obtenir une collection de ClassB par PolicyNumber.

+0

Peu importe combien j'essaie de publier mes messages sur les touches composées, je n'arrive pas à faire stopper les gens en leur suggérant de changer de BD. Je me rends compte que je n'ai pas dit que je ne peux pas ajouter de clés, ce qui était un oubli, mais je ne peux pas changer le DB. J'ai combattu cette bataille depuis longtemps. AVIS DE NON-RESPONSABILITÉ: il s'agit d'une base de données héritée. Je n'ai aucun contrôle sur les touches composites. Ils sucent et ne peuvent pas être changés, peu importe que vous me disiez qu'ils sucent. Je ne peux pas ajouter de clés de substitution non plus. –

+0

Je l'ai vu "Je suis ouvert à presque toutes les idées" mais raté "Je ne peux pas ajouter de clés de substitution non plus". J'ai une idée de plus que je vais ajouter avec un edit. –

+0

J'ai ajouté la partie sur les clés de substitution après votre commentaire. Je sais que j'ai quitté cette partie. Merci pour les idées. –

Questions connexes