#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. но строка подключения правильная, и она отлично работает для других приложений.