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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top