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)) 
     { 
      // ... 
     } 
    } 
} 
相關問題