У меня возникла проблема с подключением к DBcontext с несколькими подключениями. Пожалуйста, помогите мне решить эту проблему, вот сценарий.
У меня есть приложение Angular5 и контроллеры Webapi. У меня есть 4 базы данных, и у каждой базы данных разные пользователи.
Когда 4 пользователя одновременно пытаются подключиться к своей базе данных через контроллер Webapi, все пользователи получают данные из одной базы данных (а не из другой базы данных).
Когда мы пытаемся подключиться один за другим, тогда данные получаются правильно.
Вот мой пример кода для динамического соединения.
Строка подключения к контексту:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings.
optionsBuilder.UseSqlServer(LoginController.ConnectionString);
}
API контроллера:
public IEnumerable<object> Getvendordetails([FromBody] dynamic id)
{
if (Request != null)
{
LoginController.DynamicDbname = Request.Headers["Connectionstring"];
}
ContextEntity obj = new ContextEntity();
}
Здесь LoginController.DynamicDbname - Статическая переменная.
Редактировать код:
Контроллер:
namespace AngularDotnetCore.Controllers
{
[Route("api/[controller]")]
public class HomeController : Controller
{
private readonly IHttpContextAccessor httpContext;
private ContextEntity db;
public HomeController(IHttpContextAccessor _httpContext)
{
this.httpContext = _httpContext;
db = new ContextEntity(httpContext);
}
[HttpPost("GetVendors")]
public IEnumerable<object> Getvendordetails([FromBody] dynamic id)
{
//string DynamicConnection = Request.Headers["Connection"];
db = new ContextEntity(httpContext);
return db.Vendors;
}
[HttpGet("GetItems")]
public IEnumerable<object> GetItems()
{
//string DynamicConnection = Request.Headers["Connection"];
db = new ContextEntity(httpContext);
return db.Items;
}
}
}
DBContext:
private readonly HttpContext httpContext;
public ContextEntity(IHttpContextAccessor httpContextAccessor)
: base()
{
httpContext = httpContextAccessor.HttpContext;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var connection = httpContext.Request.Headers["Connection"];
optionsBuilder.UseSqlServer(connection);
}
Я передал параметр httpcontext базовому классу Dbcontext для каждого запроса API.
Пожалуйста, помогите мне в этой проблеме, если мой код неверен, пожалуйста, предложите мне хороший способ.
Спасибо
Victor.A