Dot-Net

Fluent NHibernate - 僅在不存在時創建數據庫模式

  • May 4, 2011

我有一個使用 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不進行破壞性更新(刪除表、列等)。它只會添加它們。

引用自:https://stackoverflow.com/questions/5884359