Как исправить ошибку `Существующее соединение было принудительно закрыто удаленным хостом` в ядре EF

#c# #sql-server #entity-framework-core

#c# #sql-сервер #entity-framework-core

Вопрос:

Я меняю поставщика сервера баз данных с MySQL на SQL Server Express, поэтому я меняю все свои библиотеки классов .NET Framework 4.6.1, которые я использовал ранее для подключения к базе данных MySQL. Конечно, я заново создал миграцию, установил Microsoft.EntityFrameWorkCore.SqlServer вместо MySQL и настроил DbContext .

Я использую эти библиотеки в качестве плагинов для игрового сервера, поэтому я установил их там. К сожалению, если не удается загрузить и выдает эту ошибку:

Система.Сеть.Сокеты.Исключение SocketException (0x80004005): существующее соединение было принудительно закрыто удаленным хостом.

Я попытался запустить то DbContext же самое, что и консольное приложение .NET Framework 4.6.1, и это сработало. Я также изменил все для моей другой библиотеки классов, которая использовала MySQL, но она также не загрузилась. Поэтому я считаю, что эта ошибка возникает только с библиотекой классов.

Контекст моей базы данных ( SQLKits это название моего игрового плагина)

 public class SQLKitsContext : DbContext
{
    public virtual DbSet<Kit> Kits { get; set; }
    public virtual DbSet<KitItem> KitItems { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(@"Server=localhostsqlexpress;Database=unturned;Trusted_Connection=True;");
    }
}
 

и это изображение моего класса экземпляра, в котором я определяю DbContext :

https://i.imgur.com/hb0H9l0.png

Я также пытался использовать его без миграции, но это тоже не удалось.

А в профилировщике SQL Server ничего не говорится о попытке подключения, поэтому плагин даже не подключается к нему.

Я долгое время отлаживал эту проблему, и я действительно не мог решить ее сам, и никто не мог мне помочь, поэтому я прошу решения здесь.

~ Спасибо

Полная ошибка:

Система.Сеть.Сокеты.Исключение SocketException (0x80004005): существующее соединение было принудительно закрыто удаленным хостом.

в Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Выполнить [TState,TResult] (Microsoft.EntityFrameworkCore.Storage.IExecutionStrategy стратегия, система.Функция 2[T,TResult] operation, System.Func 2[T, TResult] verifySucceeded, состояние TState) [0x0001f] в : 0
в Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Выполнить [TState,TResult] (Microsoft.EntityFrameworkCore.Storage.IExecutionStrategy стратегия, состояние TState, система.Функция `2 [T, TResult] операция) [0x00000] в : 0
в Microsoft.EntityFrameworkCore.SQLServer.Хранение.Internal.SqlServerDatabaseCreator.Существует (System.Логическая повторная попытка не существует) [0x00034] в <253b972c331e4e9c86e8f6b8430dc9d0>:0
в Microsoft.EntityFrameworkCore.SQLServer.Хранение.Internal.SqlServerDatabaseCreator.Существует () [0x00000] в <253b972c331e4e9c86e8f6b8430dc9d0>:0
в Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists () [0x0000b] в <69f795dffc844780bfcfff4ff8415a92>:0
в Microsoft.EntityFrameworkCore.Migrations.Внутренний.Мигратор.Миграция (System.String TargetMigration) [0x00012] в <69f795dffc844780bfcfff4ff8415a92>:0
в Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.Миграция (Microsoft.EntityFrameworkCore.Инфраструктура.DatabaseFacade databaseFacade) [0x00010] в <69f795dffc844780bfcfff4ff8415a92>:0
при восстановлении монархии.SQLKits.SQLKitsPlugin d__13.MoveNext () [0x00033] в <4589f5df884b435cab61ef028aadd6e8>:0

— Конец трассировки стека из предыдущего местоположения, где было вызвано исключение —

в System.Runtime.Службы исключений.ExceptionDispatchInfo.Throw () [0x0000c] in :0
в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Многопоточность.Задачи.Задача задачи) [0x0003e] в: 0
в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Многопоточность.Задачи.Задача задачи) [0x00028] в: 0
в System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Многопоточность.Задачи.Задача задачи) [0x00008] в: 0
в System.Runtime.CompilerServices.TaskAwaiter.GetResult () [0x00000] in :0
в Rocket.Core.Плагины.Плагин d__32.MoveNext () [0x002c4] в <4bcff08a1274468caf2867ee950c3ee7>:0«

Комментарии:

1. сначала поместите двойной «\» после локального хоста в connectionstring, во-вторых, вы уверены в своем имени базы данных (unturned)?, имеет ли ваш пользователь Windows доступ к базе данных?

2. @hassan.ef Да, я использую учетную запись администратора и запускаю ее как администратор. Да, я уверен в имени базы данных, потому что оно работало для консольного приложения, как я уже сказал.

Ответ №1:

Измените строку подключения на

 optionsBuilder.UseSqlServer(@"Server=.sqlexpress;Database=unturned;Trusted_Connection=True;")
 

Комментарии:

1. но строка подключения правильная, и она отлично работает для других приложений.