NHibernate SchemaExport e Configure () catch-22
-
06-07-2019 - |
Domanda
Voglio usare DDD in un nuovo progetto e modellare prima le mie lezioni, quindi generare lo schema del database basato sulla libreria di classi. Il mio piano è di farlo con lo strumento hibm2ddl NHibernate SchemaExport
.
Il problema è che non riesco a far funzionare SchemaExport
a causa di uno strano problema di cattura 22 che mi pone. SchemaExport
richiede un Configurazione
che richiede esso stesso un file di configurazione NHibernate valido e un set di mappature del database.
Il catch-22 qui è che quando eseguo Configure (), si lamenta " Impossibile determinare il nome della tabella per l'entità 'MyEntity'; rimuovi l'attributo 'table' o assegna un valore ad esso. "
Quindi il metodo Configure ()
richiede che la tabella esista, mentre si suppone che SchemaExport
per crearlo in base al Configuration
che non posso creare perché la tabella non esiste.
Quindi, come mai dovrei creare un SchemaExport
per fare effettivamente qualcosa di utile senza avere Configure ()
buttare e lamentarsi che non riesce a trovare le tabelle che devono essere create con SchemaExport
? Esiste una modalità " Posso impostare l'oggetto Configuration
in modo che non verifichi l'esistenza del database nelle tabelle fornite o c'è qualcos'altro che devo fare?
Soluzione
Puoi pubblicare il tuo file di configurazione?
Uso sempre questo metodo senza tabelle presenti e sono in grado di generare lo schema al volo. La mia ipotesi è che potresti avere qualcosa in uno dei tuoi file .hbm. Prova a ridurre lo schema in 1 tabella, facendolo funzionare, quindi costruendolo da lì. Come riferimento, ecco il codice che utilizzo per generare lo schema db:
var cfg = new Configuration();
cfg.Configure();
var schema = new SchemaExport(cfg);
schema.Create(true, true);
Questo spingerà anche lo script sulla console per te, così puoi vedere quale SQL viene generato contro il db.