根据登录用户使用不同的连接名称

时间:2015-11-19 16:56:08

标签: asp.net-mvc entity-framework asp.net-core-mvc entity-framework-core

这是与this one完全相同的问题,但这次我使用MVC6和EF7,所以情况完全不同。

我正在研究方法here,但我迷路了。

我有6个连接字符串,我在appsettings.json文件中定义了它们。根据用户的不同,我会从用户数据库中获取他的连接字符串名称并将其用于数据数据库,但此时我无法在不使用nonDI路径的情况下完成此操作。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

可以使用DbContextOptions配置DbContext的连接字符串。

public class BloggingContext : DbContext
{
    public BloggingContext (DbContextOptions options)
        : base(options)
    { }

    public DbSet<Blog> Blogs { get; set; }
}

您可以使用非DI路由,或者您可以创建一个调用此构造函数的DI服务并直接注入该DI服务而不是DbContext。你可以这样写:

public class BloggingContextFactory
{
    public void Create(UserAccount userAccount)
    {
        var optionsBuilder = new DbContextOptionsBuilder();
        optionsBuilder.UseSqlServer(userAccount.ConnectionString);

        return new BloggingContext(optionsBuilder.Options);

    }
}

// in Startup.ConfigureServices

        .AddSingleton(new BloggingContextFactory());


// once injection
public class Controller
{
    public Controller(BloggingContextFactory factory)
    {
        _factory = factory;
    }

    public void DoSomething()
    {
        // ...
        using(var db = _factory.Create(userAccount))
        {
            // ...
        }
    }
}