|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Nouveau Membre du Club
![]() Étudiant Inscription : mai 2009 Messages : 102 ![]() |
Salut à tou(te)s ,
C'est encore moi et cette fois j'ai un souci au niveau des clés étrangères. Ce sont des relations many-to-one et one-to-many. J'en ai deux qui fonctionnent mais pour d'autres cela ne fonctionne pas et pourtant la syntaxe et le principe sont identiques aux relations qui fonctionnent. C'est difficile de présenter le problème. Surtout que pour comprendre l'histoire, il faudrait poster les fichiers hbm.xml ... Voici le hbm de ma classe de base. Mon autre classe a un champ SSN_STA_ID qui pointe vers STA_ID de la classe stations_sta de base Code :
Code :
Code :
Merci d'avance pour vos conseils ... |
||||||
|
|
00
|
|
|
#2 |
|
Membre expérimenté
![]() worm Consultant .Net Inscription : février 2010 Messages : 288 ![]() |
Bonjour,
Peut tu donner plus de précision sur les erreurs remonte et le contexte utilisé (Web, client lourd ect....) et l'environnement Merci
__________________
"Le train de tes injures roule sur le rail de mon indifférence." "Monde de merde !!" Georges Abitbol. |
|
|
00
|
|
|
#3 | |
|
Nouveau Membre du Club
![]() Étudiant Inscription : mai 2009 Messages : 102 ![]() |
Voici les erreurs générées lors du déroulement du test Nunit
Citation:
Je suis en NH3.0, .Net 2.0, Visual Studio 2005 MySql 5.5, Proxy LinFu (Castle ne fonctionne pas étonnamment) Je précise également que j'ai utilisé NHibernate Mapping Generator pour créer les classes et les hbm.xml. J'ai ensuite du adapter les classes pour palier aux properties automatiques qui ne sont pas générés en .Net 2.0 et j'ai rempli les champs Key column dans les balises <bag> des mappings pour pointer sur le bon champ de la table référencée. Et c'est une application CRUD destinée à du winform...par de framework particulier pour le moment. C'est simplement histoire de faire tourner NHibernate sur une base de données existante. Le mapping me pose pas mal de pbs avec les foreign keys qui passent pas toutes. |
|
|
|
00
|
|
|
#4 |
|
Membre expérimenté
![]() worm Consultant .Net Inscription : février 2010 Messages : 288 ![]() |
A vu d’œil effectivement tes fichier de mapping n'ont pas l aire faux. J’avoue que j'utilise plus volontiers FluentHibernate pour la création de mes mapping et aussi avoir très peu de connaissance sur le SGBD MySql (en gros je sert a que dalle
).....Je regarde quand même si je peut trouver une piste afin de t'aider.
__________________
"Le train de tes injures roule sur le rail de mon indifférence." "Monde de merde !!" Georges Abitbol. |
|
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Étudiant Inscription : mai 2009 Messages : 102 ![]() |
Hé merci de m'aider, c'est très sympa !
Tu me dis qu'avec fluentNHibernate ça marche bien dans ton cas ? Est-ce que si je tente de l'utiliser ça peut me générer des mappings corrects ? J'ai vu que NHibernate Mapping Generator peut aussi générer les classes pour fluentNHibernate. C'est ce que tu as fait ? |
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() ![]() Développeur .NET Inscription : février 2011 Messages : 65 ![]() |
Salut,
la Fluent API de NHibernate permet une approche plus souple et est surtout utilisé pour une approche Code-First, on code puis les tables sont générées en fonction. Alors que le mappings xml permet d'avoir une assurance sur notre mappings entre les classes et la base, approche DataBase-First. Par contre les générateur automatique comme Visual NHibernate (version d'essai) marche plutôt bien.
__________________
"Two turkeys do not make an eagle" Vic Gundotra Projet personnel: http://ntracker.codeplex.com/ - Framework d'injection de dépendances https://mayhemkinect.codeplex.com/ - Ajout du support de la Kinect pour Mayhem Quelque outils sympas: http://mayhem.codeplex.com/ http://makemayhem.com/ |
|
|
00
|
|
|
#7 |
|
Membre expérimenté
![]() worm Consultant .Net Inscription : février 2010 Messages : 288 ![]() |
L’idée de fluent est de faire le mapping des table par une approche "programmatique", je trouve cela plus convivial et tu bénéficies de l’auto-complétion (car tu code en c#, même si l'auto-complétion existe pour la création des schéma xml...).
Je me posait une question au vu des exception remontées, a tu des erreurs au moment ou tu créer ta Factorie ou seulement au moment de l’interrogation de la table (si tu demande a Nhibernate de te sortir les requêtes généré sont elle correctes) ? Le schema dans mySql est il correcte, ta table est elle correctement créer. Demande tu a ta Factorie de la créer si elle n'existe pas ? (Edit : question mal posée)
__________________
"Le train de tes injures roule sur le rail de mon indifférence." "Monde de merde !!" Georges Abitbol. |
|
|
00
|
|
|
#8 | |||
|
Nouveau Membre du Club
![]() Étudiant Inscription : mai 2009 Messages : 102 ![]() |
Citation:
Citation:
Citation:
J'ai configuré NHibernate avec un "show_sql" mais ça ne m'affiche pas les requetes SQL ... ce qui est bien embetant pour debugger. En fait dans ma methode de test NUnit, j'ai en setup un schema export pour maitriser exactement le contenu de mes tables de la base. Donc avant chaque methode de test appelée je recrée toutes les tables et y insere des valeurs. Même lorsque la base est vide, ça plante pour les foreign keys... |
|||
|
|
00
|
|
|
#9 | ||
|
Membre expérimenté
![]() worm Consultant .Net Inscription : février 2010 Messages : 288 ![]() |
Citation:
Citation:
Concernant l'affichage des requêtes j'ai déjà eu le soucis mais je me souviens plus d'où ça venait, surement ta factory qui est mal généré (surement du au fait que ton mapping n'est pas cohérent avec ton schéma : les clés primaires/étrangères mal définie). Regarde le delta que tu as entre une base créer par Nhibernate à partir de ton schéma et le schéma utilisé.
__________________
"Le train de tes injures roule sur le rail de mon indifférence." "Monde de merde !!" Georges Abitbol. |
||
|
|
00
|
|
|
#10 | |||
|
Nouveau Membre du Club
![]() Étudiant Inscription : mai 2009 Messages : 102 ![]() |
En fait, utiliser FluentNHibernate me déplairait pas.
Seulement quand j'essaie de l'utiliser en mettant la librairie en reference et en me plaçant dans le fichier de mapping d'une table au hasard par exemple...le code fluent n'est pas reconnu ... lors que je fais un Code :
Citation:
J'ai pris FluentNHibernate pour le NH3.1 ... et j'ai mis en reference toutes les libs présentes dans le zip ... Donc voilà c pas vraiment plus concluant avec fluent pour le moment. J'essaie pour le moment de créer les classes tables.cs et les mappings.cs avec Visual NHibernate à partir de ma base MySQL5.5 existante. Vous utilisez quelles versions de Fluent et NH ? |
|||
|
|
00
|
|
|
#11 | ||
|
Membre expérimenté
![]() worm Consultant .Net Inscription : février 2010 Messages : 288 ![]() |
En regardant ton ancien poste j'ai vu que tu utilisait .Net 2.0, hors dans cette version du Framework les expressions lambda ne sont pas connues. C'est a confirmer mais la version la plus basse du Framework compatible avec Fluent est le 3.5.
D'autre part je crois qu'il convient mieux d’écrire : Code :
Il est vrai que Fluent est un outil très agréable pour réaliser le mapping car il permet une lecture facile tout en laissant la possibilité de maitriser entièrement ce que l'on fait. De toute manière je pense que le fait d'utilisé Fluent ou pas ne fera que déporter ton problème. Il faut que ton mapping décrive au maximum et soit le plus proche possible de ton schéma de donnée. J'ai moi même été dans ton cas dans un projet et j'ai pu le résoudre uniquement en précisant parfaitement et le plus explicitement les relations que j'avais entre les tables.
__________________
"Le train de tes injures roule sur le rail de mon indifférence." "Monde de merde !!" Georges Abitbol. |
||
|
|
00
|
|
|
#12 | |
|
Nouveau Membre du Club
![]() Étudiant Inscription : mai 2009 Messages : 102 ![]() |
Ah ouais effectivement, ça serait intéressant de savoir si y a requirements spécifiques pour utiliser fluent...
En tout cas je n'ai rien trouvé sur le sujet. Je vais essayer de regler mon problème en refaisant une passe sur les fichiers hbm.xml mais bon j'ai rien trouvé de prometteur. Surtout que le "show_sql" ne fonctionne pas et je ne peux pas utiliser cette info pour debugger ... Bon en tout cas merci pour votre aide. Je vais me pencher sur le problème encore une fois en espérant trouver une coquille ... Bon j'ai eu l'idée d'aller voir sur le logs coté server mysql puisque je n'avais pas la possibilité de voir les requetes sql généré par nhibernate directement dans visual studio. Citation:
|
|
|
|
00
|
|
|
#13 |
|
Membre expérimenté
![]() worm Consultant .Net Inscription : février 2010 Messages : 288 ![]() |
Quelques points a vérifié tout de même :
- Utilise tu le bon dialecte - Précise bien le nom des séquence que tu utilise dans ton mapping - il y a parfois aussi des soucis suivant l'ordre du Flush() et commit() Save/update/delete (très chiant à gérer) - Utilise tu le bon générateur de séquence (je sais qu il y a un truc spéciale pour Mysql). - Je sais aussi que sur MySql tu as plusieurs type de table suivant le fait d'avoir des contraintes d'intégrité. Regarde aussi de ce cote là (je n'ai que très peu utilise Mysql) Essaye aussi de supprimer le lazy qui peut compliquer les choses dans un but de test. Essaye de générer ton schéma sur un SqlServer pour voir si tu as bien le bon.
__________________
"Le train de tes injures roule sur le rail de mon indifférence." "Monde de merde !!" Georges Abitbol. |
|
|
00
|
|
|
#14 | ||
|
Nouveau Membre du Club
![]() Étudiant Inscription : mai 2009 Messages : 102 ![]() |
Bon, je vous fais une petite mise à jour de la situation.
En fait j'ai enlevé plusieurs librairies en références dont celles du proxy. Bizarrement sans ces deux dlls en références et la configuration du hibernate.hbm.xml comme suit : Code :
Le petit problème que j'ai maintenant est une erreur lors de la génération d'une clé étrangère sur un champ varchar(45) J'ai essayé en changeant le type de ce champ en int(11) et là bingo ça marche. Ma base est créée avec toutes les tables et les FK adéquates ... Aucune idée du pourquoi cette clé etrangère vers un champ varchar(45) peut poser un problème... M-A-J : En fait j'ai remarqué que le champ pointé par ma clé étrangère dans le cas qui pose problème n'est pas une clé primaire d'une table mais un champ varchar(45) avec contrainte d'unicité. Est-ce qu'il faut faire quelque chose de spécial pour, via une clé étrangère, pointer vers un champ autre qu'une clé primaire ? MAJ2: je crois qu'il faut utiliser property-ref pour pointer vers autre chose que la clé primaire ... j'vais tester SI vous avez des remarques... Globalement ça avance mine de rien. Merci encore pour votre aide ;p |
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com