如何使用动态连接字符串DI一个EF 6服务

时间:2015-09-17 17:54:35

标签: c# asp.net-mvc entity-framework dependency-injection

我们的数据库设置有一个管理员数据库和多个客户端数据库。当用户登录时(通过管理员数据库),我们确定他们应该使用哪个客户端数据库并返回该连接字符串以供将来使用(存储在会话中)。

我非常喜欢this answer处理EF6的方式,并希望实现类似的功能,但我不确定如何使用DI并更新连接字符串。

使用DbConnection直接对DbContext上的连接字符串进行实际更新。它只是通过我目前没有看到的一些DI机制干净地创建和更新DbContext的能力。

1 个答案:

答案 0 :(得分:-1)

DI是编译时进程,但是你可以在运行时使用工厂模式做一些决定来实例化一个类(来自一组继承自同一接口的类),具体取决于某些条件

作为您的问题的解决方案,您可以使用静态函数返回相应的连接字符串,不需要DI

public static class ConnectionStringPorvider
{
    public static string getConnectionString()
    {
        switch(dbName)
        {
         ....
        }
    }
}

并在您的数据上下文类

base(global::[class name space].ConnectionStringPorvider.getConnectionString(dbName), mappingSource)