2014-12-02 70 views
0

我想學習nhibernate。我知道如何創建表和實體圖。但是我無法理解的是如何使用nHibernate創建一個新的Schema。NHibernate定義架構名稱

我搜索並發現使用「ExposeConfiguration」可以創建一個Schema,但我無法理解我在哪裏提供新的Schema名稱。

回答

0

有很清晰的文檔:

因此,架構名稱可以基本設置前每個類/表:

public MyEntityMap() 
{ 
    ... 
    Schema("mySchema"); 
} 

違約可能像這樣設置:

MsSqlConfiguration.MsSql2005 
    .UseOuterJoin() 
    .DefaultSchema("dbo"); 

這是一些代地方還有:

private static ISessionFactory CreateSessionFactory() 
{ 
    return Fluently.Configure() 
    .Database(
     SQLiteConfiguration.Standard 
     .UsingFile("firstProject.db") 
    ) 
    .Mappings(m => 
     m.FluentMappings.AddFromAssemblyOf<Program>()) 
    .ExposeConfiguration(BuildSchema) 
    .BuildSessionFactory(); 
} 

private static void BuildSchema(Configuration config) 
{ 
    // delete the existing db on each run 
    if (File.Exists(DbFile)) 
    File.Delete(DbFile); 

    // this NHibernate tool takes a configuration (with mapping info in) 
    // and exports a database schema from it 
    new SchemaExport(config) 
    .Create(false, true); 
} 

EXTEND:如何創建模式本身? (例如mySchemaName

隨着HBM我們可以引入這個嵌入資源

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
    namespace="MyNamespace" assembly="MyAssembly"> 

    <database-object> 

    <create > 
     IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'mySchemaName') 
     EXEC('CREATE SCHEMA mySchemaName') 
     GO 
    </create> 
    <drop></drop> 
    </database-object> 

</hibernate-mapping> 

如果該腳本將被納入流利配置爲先,它會爲我們創造的模式:

+0

架構(「mySchema」);這個聲明是否告訴這個表屬於這個Scehma(但是模式應該已經存在於DB中)。據我所知,這個語句不會在數據庫中創建一個新的模式。對 ? – Sumit 2014-12-04 06:19:57

+0

我明白了......現在你的意思是......我不記得我是如何解決這個問題的。 – 2014-12-04 06:20:59

+0

我發現。我們可以使用特殊的數據庫對象來提供一些特殊的自定義腳本...希望這會有所幫助;)享受令人驚歎的NHibenrate – 2014-12-04 07:43:01