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))
{
// ...
}
}
}