2015-11-24 59 views
2

我有一個使用CodeFluent構建的應用程序,該應用程序作爲SAAS解決方案託管。它使用Ms Azure數據庫作爲存儲,但現在所有客戶都在同一個數據庫中。考慮到SAAS解決方案的最佳實踐,分離數據庫會更好。備份/恢復單獨的客戶端數據會更容易,並且從安全角度來看也更好。我們想使用Azure彈性數據庫池。Saas解決方案中的Codefluent獨立數據庫

然而,這並不簡單。 Codefluent使用固定的數據庫連接,在web.config中設置。如果我能以某種方式改變它,我怎樣才能確定使用哪個數據庫。有沒有一個會話或httpcontext ...有沒有人有同樣的挑戰,你是如何解決它?

回答

3

每個用戶都有一個數據庫。這意味着您需要在查詢數據庫之前更改連接字符串。隨着CodeFluent實體可以在運行時更改連接字符串:

CodeFluentContext context = CodeFluentContext.Get(MyApp.Constants.MyAppStoreName); 
CodeFluentPersistence persistence = context.Persistence; 
persistence.ConnectionString = GetCurrentTenantConnectionString(); 
var products = ProductCollection.LoadAll(); 

或者,您可以創建自定義CodeFluentPersistence

public class MultiTenantPersistence : CodeFluentPersistence 
{ 
    public MultiTenantPersistence(CodeFluentContext context) : base(context) 
    { 
    } 

    public override string ConnectionString 
    { 
     get 
     { 
      return GetCurrentTenantConnectionString(); 
     } 
     set 
     { 
      base.ConnectionString = value; 
     } 
    } 

    private string GetCurrentTenantConnectionString() 
    { 
     // TODO Implement your own logic 
     return $"Server=sample;Database=sample_{Context.User.UserName};Trusted_Connection=True;"; 
    } 
} 

然後,你需要在配置文件中註冊MultiTenantPersistence

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="Samples" type="CodeFluent.Runtime.CodeFluentConfigurationSectionHandler, CodeFluent.Runtime" /> 
    </configSections> 

    <Samples persistenceHookTypeName="Sample.MultiTenantPersistence, Sample" /> 
</configuration>