1

this one完全相同,但是这次我使用的是MVC6和EF7,所以情况完全不同。根据登录的用户使用不同的连接名称

我正在寻找here的方法,但我迷路了。

我有6个连接字符串,我将它们全部定义在appsettings.json文件中。根据用户的不同,我会从用户数据库中获取他的连接字符串名称,并将其用于数据库,但此时我无法看到如何在不使用非直接路径的情况下执行此操作。

有什么建议吗?

回答

0

DbContext的连接字符串可以配置为DbContextOptions

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)) 
     { 
      // ... 
     } 
    } 
} 
相关问题