Fluent NHibernate - Erstellen Sie nur ein Datenbankschema, wenn es nicht existiert
Ich habe eine Anwendung, wo ich Fluent Nhibernate zum erstellen meiner Datenbank. So weit ich habe die Neuerstellung der Datenbank-schema-jedes mal. Der code, der dies tut, ist dies:
public NhibernateSessionFactory(IPersistenceConfigurer config)
{
_sessionFactory = Fluently.Configure().
Database(config).
Mappings(m => m.FluentMappings.AddFromAssemblyOf<MappingsPersistenceModel>()).
ExposeConfiguration(BuildSchema).
BuildSessionFactory();
}
private static void BuildSchema(Configuration config)
{
//if (DbExists(config))
// return;
new SchemaExport(config).Create(false, true);
}
Beachten Sie die "if (DbExists(config))
". Dies ist, was ich gerne tun würde. Ich möchte das schema nur dann, wenn es eigentlich nicht bereits vorhanden ist. Und im nächsten Schritt - ich möchte zu aktualisieren
es erstellt werden, wenn es nicht auf dem neuesten Stand.
Wie kann ich das erreichen? Ich erwarte eine config.DatabaseExists()
aber ich kann nicht so etwas sehen. Ich sehe einige Möglichkeiten für einen hacky Lösung, aber was ist die typische empfohlene Art der Behandlung?
InformationsquelleAutor der Frage stiank81 | 2011-05-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einfach
SchemaUpdate
statt, es wird das schema aktualisieren, wenn es vorhanden ist, und erstellen Sie, falls noch nicht:Einer Einschränkung:
SchemaUpdate
nicht destruktive updates (löschen von Tabellen, Spalten, etc.). Es wird nur hinzufügen.InformationsquelleAutor der Antwort Gabe Moothart
AKTUALISIERT (Dank dotjoe)
Hbm2ddl ist nur in der Lage zu tun, ein schema diff und nur das aktualisieren, was sich geändert hat mit der SchemaUpdate-Klasse. Aber diese Klasse ist sehr rudimentär, es dauert nur einen Blick auf die aktuellen Einheiten und wie Sie das schema unterscheidet. Wenn wesentliche änderungen vorgenommen wurden, (d.h. Entitäten, die entfernt oder link-Tabellen entfernt) es wird nicht in der Lage sein, um das herauszufinden.
Auf einem früheren Projekt, das wir verwendet, hbm2ddl, aber wir haben seit verschoben auf Fluent Migrator. Ich würde sagen, Ihre beste Wette ist, verwenden Sie ein migration-tool, wie Fließend Migrator oder Migrator.NET.
http://github.com/schambers/fluentmigrator/
http://code.google.com/p/migratordotnet/
InformationsquelleAutor der Antwort Vadim