2017-11-17 137 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