.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
  }
}

0 ответов

Другие вопросы по тегам