1
與this one完全相同,但是這次我使用的是MVC6和EF7,所以情況完全不同。根據登錄的用戶使用不同的連接名稱
我正在尋找here的方法,但我迷路了。
我有6個連接字符串,我將它們全部定義在appsettings.json
文件中。根據用戶的不同,我會從用戶數據庫中獲取他的連接字符串名稱,並將其用於數據庫,但此時我無法看到如何在不使用非直接路徑的情況下執行此操作。
有什麼建議嗎?
與this one完全相同,但是這次我使用的是MVC6和EF7,所以情況完全不同。根據登錄的用戶使用不同的連接名稱
我正在尋找here的方法,但我迷路了。
我有6個連接字符串,我將它們全部定義在appsettings.json
文件中。根據用戶的不同,我會從用戶數據庫中獲取他的連接字符串名稱,並將其用於數據庫,但此時我無法看到如何在不使用非直接路徑的情況下執行此操作。
有什麼建議嗎?
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))
{
// ...
}
}
}