NHibernate SchemaExport et Configure () catch-22
-
06-07-2019 - |
Question
Je souhaite utiliser DDD dans un nouveau projet et modéliser d'abord mes classes, puis générez le schéma de base de données basé sur la bibliothèque de classes. Mon plan est de faire cela avec l'outil NHibernate hbm2ddl SchemaExport
.
Le problème est que je ne parviens pas à faire fonctionner SchemaExport
en raison d'un problème étrange catch-22 qui me pose problème. Le SchemaExport
nécessite un Configuration
qui requiert lui-même un fichier de configuration NHibernate valide ainsi qu'un ensemble de mappages de bases de données.
Le catch-22 ici est que lorsque je fais la configuration (), il se plaint " Impossible de déterminer le nom de la table pour l'entité 'MyEntity'; supprime l'attribut 'table' ou lui attribue une valeur. "
La méthode Configure ()
requiert donc l'existence de la table, tandis que le SchemaExport
est supposé pour le créer en fonction de la Configuration
que je ne peux pas créer car la table n'existe pas.
Alors, comment diable suis-je censé créer un Configuration
NHibernate valide contenant les mappages requis pour que SchemaExport
fasse réellement quelque chose d'utile sans Configure ()
jeter et se plaindre de ne pas trouver les tables à créer avec SchemaExport
? Existe-t-il un " mode " Je peux définir l'objet Configuration
afin qu'il ne vérifie pas l'existence des tables fournies dans la base de données, ou y a-t-il autre chose à faire?
La solution
Pouvez-vous publier votre fichier de configuration?
J'utilise cette méthode tout le temps en l'absence de tables et je peux générer le schéma à la volée. J'imagine que l'un de vos fichiers .hbm peut avoir un problème. Essayez de réduire votre schéma à une table, de le faire fonctionner, puis de le construire à partir de là. À titre de référence, voici le code que j'utilise pour générer le schéma de base de données:
var cfg = new Configuration();
cfg.Configure();
var schema = new SchemaExport(cfg);
schema.Create(true, true);
Cela poussera également le script sur la console pour vous, afin que vous puissiez voir quel code SQL est généré sur la base de données.