.Net Core SqlConnection к внешней базе данных, кажется, блокирует соединение с базой данных DbContext.Database
Я не сталкивался с этой проблемой раньше, и я изучал задачи и потоки, не находя / не понимая решения.
Контекст заключается в том, что у меня есть база данных A на сервере A, и я извлекаю данные оттуда и вставляю их в базу данных B на сервере B (мой DbContext).
Из приведенного ниже кода происходит следующее:
- GetPartners() успешно возвращает данные из базы данных A.
- При попытке установить соединение обратно к серверу B моя база данных сохранена в контексте, который я не могу. Контекст возвращается ноль.
- Если я перемещаю этот простой блок с помощью AddParnters() над вызовом GetPartners(), я получаю соединение из своего контекста, как и ожидалось.
ConnectionState из GetPartners() отображается как закрытый после возврата результатов, поэтому я не чувствую, что это блокировка, но я изо всех сил пытаюсь его правильно отладить.
public class PartnerRepository : IPartnerRepository {
private readonly IConnectionStringBuilder connectionStringBuilder;
private readonly BackendContext context;
public PartnerRepository (IConnectionStringBuilder connectionStringBuilder, BackendContext context) {
this.connectionStringBuilder = connectionStringBuilder;
this.context = context;
}
public void AddPartners (int dbConnectionId) {
List<PartnerExport> pE = GetPartners (dbConnectionId).Result; // this is populated nicely
if (pE.Count > 0) {
using (IDbConnection dbConnection = context.Database.GetDbConnection ()) {
var connection = dbConnection; // this is null. if I move this ABOVE the GetPartners() call, it populates.
};
}
}
public List<PartnerExport> GetPartners (int dbConnectionId) { // the user selects the database they wish to connect to in the front end.
string sql = "SELECT FROM a VALID SQL STATEMENT";
using (IDbConnection dbConnection = connectionStringBuilder.BuildConnectionString (dbConnectionId)) { // we build a SqlConnection string and then get the data.
dynamic result = dbConnection.Query<dynamic> (sql).Select (a => new PartnerExport () {
/* ... lots of fields ... */
}).ToList ();
return result;
} // so we should now dispose of this nicely due to using
}
}