2014-03-25 44 views
1

是否可以配置流利的nhibernate創建基於流利的映射一些模型類的數據庫模型,同時有手動(SQL)創建數據庫表和模型類映射在他們在一個項目?流利NHibernate模型第一個和數據庫第一個在一個項目中

我是nhibernate的新手。

我開始創建模型類並使用流暢映射來創建數據庫模式。 然後我想添加一些日誌框架,它假定db是手動創建的。

我使用NHibernateMappingGenerator生成模型類和映射類。

我編譯並運行我的項目後,日誌表已從數據庫中刪除。

問候, 塞巴斯蒂安

回答

0

此代碼將在實例創建表爲您提供:

public class NHibernateSessionFactory 
{ 
    private static ISessionFactory _sessionFactory; 

    private static ISessionFactory SessionFactory 
    { 
     get 
     { 
      if (_sessionFactory == null) 
      { 
       InitializeNHibernateSessionFactory(); 
      } 

      return _sessionFactory; 
     } 
    } 

    private static void InitializeNHibernateSessionFactory() 
    { 
     _sessionFactory = 
      Fluently.Configure() 
       .Database(MySQLConfiguration.Standard 
       .ConnectionString(ConfigurationManager.ConnectionStrings["MySQL"].ConnectionString)) 
       .ShowSql()) 
       .Mappings(m => m.FluentMappings 
       .AddFromAssemblyOf<OneOfMyMappedClassesMap>())) 
       .ExposeConfiguration(cfg => new SchemaExport(cfg).Create(true, true)) 
       .BuildSessionFactory(); 
    } 
} 

線,負責根據您的映射建立你的數據庫是一個ExposeConfiguration。如果在控制檯應用程序中使用此代碼,ShowSql選項將打印出所有生成的SQL代碼。

+0

感謝您的重播,我已經使用類似的代碼,但是我的問題稍有不同。我有一些用於創建數據庫表的映射。然後我有一些sql代碼在同一個數據庫中創建其他一組表,所以我運行它可以創建這些表*。現在我需要創建一個模型類*和模型映射*以便能夠使用存儲在表*中的信息。我編譯並運行我的代碼。表格*將從數據庫中刪除,其中包含已存儲的所有信息。我的問題是,我想以某種方式通知NHibernate表*不是,也不能從代碼生成。 –

+0

它是唯一不生成模式的解決方案,每當我需要再次生成模式時都要運行sql腳本? –

+1

您可以做到這一點,但您必須手動維護代碼,以便對模型執行的每個小更改都與O/RM的動態特性相沖突。無論您部署什麼解決方案,總會有一些機會可能會在與存儲進行交互時發生嚴重錯誤。我建議你重新檢查爲什麼必須手動創建其他表的原因,如果需要對模型進行一些修改,所以這些更改將在運行時被包含,並且所有表將從單個ISession/ISessionFactory實例創建。 – George

相關問題