Подключение базы данных к.net core MVC project

Я впервые использую.NET core 2.2 и MySQL,

Я пытаюсь создать очень простой сайт.

Я следовал следующему руководству Microsoft

https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-mvc-app/working-with-sql?view=aspnetcore-2.2&tabs=visual-studio

После добавления элемента Scaffolded я следовал инструкциям, открыл менеджер пакетов NuGet и выполнил следующие команды в cli:

Add-Migration Initial Update-Database

Update-Database Команда вызвала следующую ошибку:

При установке соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений. (поставщик: поставщик именованных каналов, ошибка: 40 - не удалось открыть соединение с SQL Server)

Я работаю с сервером Bluehost (Shared Host), я изменил разрешения, чтобы я мог удаленно подключаться к базе данных (и действительно я подключен через MySQL Workbench)

Я попытался изменить ConnectionString следующим образом:

"ConnectionStrings": 
{
    "Piano3Context": "Server=162.241.*.*;Database=PianoDB;User Id=omyUsrName;password=myPass;Trusted_Connection=True;MultipleActiveResultSets=true;"
}

и все же я получаю ту же ошибку.

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

3 ответа

Решение

Учебник, который вы упомянули, использует и SQL-Server. Для подключения к серверу MySql вам нужен другой поставщик базы данных. Вы можете установить Pomelo.EntityFrameworkCore.MySql пакет nuget для Mysql. Смотрите страницу провайдеров в документации Microsoft.

После этого вам нужно изменить options.UseSqlServer из учебника в options.UseMySql как описано на странице проекта провайдеров MySQL.

Кроме того, как настроить параметры для MySQL, вы можете переместить строку конфигурации в конфигурацию и использовать метод GetConnectionString.

services.AddDbContextPool<MvcMovieContext>(
            options => options.UseMySql("Server=localhost;Database=ef;User=root;Password=123456;", 
                mySqlOptions =>
                {
                    mySqlOptions.ServerVersion(new Version(5, 7, 17), ServerType.MySql); // replace with your Server Version and Type
                }
        ));

Я был избит @philipp-grathwohl, вам нужно использовать MySql и настроить его при запуске, как говорит его ответ.

Вместо этого вы можете использовать эту команду, которая Scaffolds DBContext и генерирует модели и контекст EF в одной команде после того, как вы изменили запуск и добавили пакет nuget Pomelo.EntityFrameworkCore.MySql:

Scaffold-DbContext "Server=<ip>;Initial Catalog=PianoDB;Persist Security Info=False;User ID=<username>;Password=<password>;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" Pomelo.EntityFrameworkCore.MySql -OutputDir Models -context Piano3Context -force

Дайте мне знать, если эта последняя команда выплевывает какие-либо ошибки.

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