此代碼將在實例創建表爲您提供:
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代碼。
感謝您的重播,我已經使用類似的代碼,但是我的問題稍有不同。我有一些用於創建數據庫表的映射。然後我有一些sql代碼在同一個數據庫中創建其他一組表,所以我運行它可以創建這些表*。現在我需要創建一個模型類*和模型映射*以便能夠使用存儲在表*中的信息。我編譯並運行我的代碼。表格*將從數據庫中刪除,其中包含已存儲的所有信息。我的問題是,我想以某種方式通知NHibernate表*不是,也不能從代碼生成。 –
它是唯一不生成模式的解決方案,每當我需要再次生成模式時都要運行sql腳本? –
您可以做到這一點,但您必須手動維護代碼,以便對模型執行的每個小更改都與O/RM的動態特性相沖突。無論您部署什麼解決方案,總會有一些機會可能會在與存儲進行交互時發生嚴重錯誤。我建議你重新檢查爲什麼必須手動創建其他表的原因,如果需要對模型進行一些修改,所以這些更改將在運行時被包含,並且所有表將從單個ISession/ISessionFactory實例創建。 – George