nhibernate hasmany sans utiliser de clé étrangère
-
05-07-2019 - |
Question
Disons que j'ai une table de demandes qui se présente comme suit:
RequestId INT
ReferenceNumber VARCHAR
Chaque demande est enregistrée dans une table requestlog. Il n'y a pas de clé étrangère entre les tables:
RequestLogId INT
ReferenceNumber VARCHAR
Content VARCHAR
Le journal des demandes contient le contenu de la demande. Ce contenu doit être stocké pendant un certain temps. La demande peut être supprimée, mais le journal ne peut l'être qu'après un certain temps.
Comment mapper mon objet de requête afin qu'il puisse contenir une liste de logs de requêtes, basée sur le numéro de référence?
J'ai essayé ceci:
Table("InsuranceRequest");
Id(i => i.Id).Column("InsuranceRequestId");
Map(i => i.ReferenceNumber);
HasMany(i => i.InsuranceRequestLog).KeyColumn("RefenceNumber").LazyLoad.Cascade.None();
Cela ne fonctionne pas bien. Ce mappage tente de mapper le numéro de référence sur le RequestLogId de requestlog. Existe-t-il un moyen de spécifier que la colonne de jonction doit être le numéro de référence de insurancerequestlog?
La solution
rien n’empêche le plus grand nombre dans la structure de votre table. Je recommande de changer la structure et d'en faire des clés étrangères, et je suis sûr que le mappage plusieurs à plusieurs fonctionnera pour vous si le mappage ne fonctionne pas après le changement de structure.
un autre conseil pour vous: prenez une base de données vide et essayez d’exposer le schéma .. que vous serez en mesure de voir ce que nhibernate pense que la structure devrait ressembler