2017-11-17 158 views
0

考慮下面的代碼段:C#.NET實體框架的多租戶最佳實踐

public class DatabaseContext : DbContext 
{ 
    public DatabaseContext(String connectionString) : base(connectionString) 
    {    
    } 
} 

public class ContextNameDatabaseContext : DatabaseContext 
{ 
    public ContextNameDatabaseContext(String connectionString) : base(connectionString) 
    { 
    } 
} 

人會說,這是構建後端的多租戶解決方案時,每個客戶端具有最佳實踐的自己的數據庫並保持數據狀態,直到用戶註銷/關閉?

在此實例中使用這些類的開發人員需要注意並小心使用何時以及如何使用「DatabaseContext」類作爲「ContextNameDatabaseContext」類的基礎的類。

請提供任何意見或建議。

+0

你的意思到底是什麼?將不同的連接字符串傳遞給構造函數? – Evk

+0

這裏的關鍵不僅是將不同的連接字符串注入'DbContext'基類,而且當用戶登錄時,維護該連接直到用戶註銷/關閉。 – Tech

+0

你提供的代碼如何解決這個問題? – Evk

回答

0

一種方法是將所有數據庫連接字符串保存爲數據庫中的參數。但是你必須保證它的加密。

然後在你的數據庫層,你可以通過解密並據此構建連接字符串後,以純文本連接爲參數:

public class MyDatabase: DbContext 
{ 
    public MyDatabase(string connString) 
    { 
     this.Database.Connection.ConnectionString = connString; 
    } 
    public DbSet<Order> Orders{ get; set; } 
} 

您也可以使用IOptions如果您使用的是.NET的核心注入連接字符串作爲依賴項。

+0

不熟悉IOptions接口,一定會讀到它。 – Tech