在我的应用中,我有一个上下文,但用户可以在登录期间选择多个数据库中的一个。所有这些数据库都基于相同的上下文,并且它们的连接字符串在web.config中配置。
我有一个缓存用户详细信息的类:
public class UserDetais
{
public string Token { get; set; }
public string ConnectionString { get; set; }
}
用户登录后,会将新的UserDetails对象添加到缓存中以供以后的请求使用。
接收到进一步的请求后,控制器从缓存中获取用户的详细信息并将其传递给服务,例如:
public class CustomerTypeController : ApiController
{
private readonly ICustomerTypeService customerTypeService;
public CustomerTypeController(ICustomerTypeService customerTypeService)
: base(logService)
{
this.customerTypeService = customerTypeService;
}
protected override void Initialize(HttpControllerContext controllerContext)
{
base.Initialize(controllerContext);
var token = controllerContext.Request.Properties["token"] as string;
var details = UserCache.Get(token);
customerTypeService.SetUserDetails(details);
}
}
然后,服务在工作单元中设置用户详细信息,在此阶段,工作单元根据用户的连接字符串创建新的上下文。
这个解决方案有效,但它看起来有点hacky。有没有更好的方法来实现单上下文多数据库策略?