[英]Fluent NHibernate - Create database schema only if not existing
我有一個應用程序,我使用 Fluent Nhibernate 創建我的數據庫。 到目前為止,我每次都在重新創建數據庫模式。 執行此操作的代碼是這樣的:
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);
}
注意“ if (DbExists(config))
”。 這就是我想做的。 只有當它實際上不存在時,我才想創建它。 在下一步中 - 如果它不是最新的,我想更新它以創建它。
我如何實現這一目標? 我期待一個config.DatabaseExists()
,但我看不到這樣的東西。 我看到了一些 hacky 解決方案的可能性,但是典型的推薦處理方法是什么?
您可以只使用SchemaUpdate
,如果它存在,它將更新架構,如果不存在則創建它:
public NhibernateSessionFactory(IPersistenceConfigurer config)
{
_sessionFactory = Fluently.Configure().
Database(config).
Mappings(m => m.FluentMappings.AddFromAssemblyOf<MappingsPersistenceModel>()).
ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(false, true)).
BuildSessionFactory();
}
一個警告: SchemaUpdate
不會進行破壞性更新(刪除表、列等)。 它只會添加它們。
已更新(感謝dotjoe )
Hbm2ddl 只能進行模式差異,並且只能更新使用 SchemaUpdate class 更改的內容。 然而,這個 class 非常初級,因為它只查看當前實體以及架構的不同之處。 如果進行了重大更改(即刪除了實體或刪除了鏈接表),它將無法弄清楚。
在較早的項目中,我們使用了 hbm2ddl,但后來我們開始使用 Fluent Migrator。 我想說你最好的選擇是使用遷移工具,比如 Fluent Migrator 或 Migrator.NET。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.