2012-04-25 50 views
0

我正在爲各家公司使用Multitenant應用程序。我還沒有得到這個成功。但是,我的情況是我有一個單一的SQL Server數據庫與不同公司(租戶)的表集。將架構前綴添加到Nhibernate表命名約定

所以我想要做的是添加一個表的約定,該表會按照多租戶應用程序的概念在表中訪問表中的模式前綴。我沒有使用每個租戶的數據庫,而是使用每個租戶的模式。數據庫文件是單個文件。

我想要做的是我的表是這樣的Sachin Sales & Service Pvt Ltd$Web User Setup Header。所以我希望在生成表查詢時,他們應該在查詢之前添加前綴Sachin Sales & Service Pvt Ltd。前綴可能會根據需要更改。它不是靜態的。所以我想重寫IClassConvention在默認情況下是這樣的

public class TableNameConvention : IClassConvention 
{ 
    public void Apply(IClassInstance instance) 
    { 
     instance.Table(instance.EntityType.Name); 
    } 
} 

反正我可以通過其他參數一樣string schemaname像這樣生成模式前綴所需的表名的?我的想法是做這樣的事情:

public class TableNameConvention : IClassConvention 
{ 
    public void Apply(IClassInstance instance, string schemaname) 
    { 
     instance.Table(schemaname + instance.EntityType.Name); 
    } 
} 

如果是這樣,我的問題在這裏這樣。如果我能夠達到上述要點,它是否可以解決我的租戶問題? 其次,即使上述犯規給任何錯誤,在編譯時(在技術上不應該)我怎麼到SCHEMANAME傳遞到那些重載?我的意思是我應該怎麼稱呼,因爲這只是一個約定,我不能操縱它飛(這其實我是想這樣做)

回答

1

NHibernate的配置時,例如可以設置所有表的模式使用

Fluently.Configure().Database(MsSqlConfiguration.MsSql2005.DefaultSchema(sometenantsSchema)) 
+0

Wil在查詢時爲表命名添加了一個前綴? – Joy 2012-04-27 08:31:34

+0

這將增加的模式前綴的所有映射(通過配置屬性「DEFAULT_SCHEMA」,見NHibernate.Cfg.Environment.DefaultSchema)。查詢來自映射生成 – Firo 2012-04-27 08:36:58