EF Core: как настроить mySql для Linux и localDB для Windows? - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть простой проект ASP.Net Core / Entity Framework Core, который использует LocalDB.Он компилируется и отлично работает в Windows.

Я хотел бы собрать и запустить один и тот же проект в Windows и Linux.Но LocalDB не поддерживается в Linux.Поэтому мне нужно настроить проект на использование mySql вместо этого - но только для Linux.

Q: Как настроить мой проект так, чтобы я мог использовать LocalDB в Windows, но mySql в Linux?

Это то, что я пробовал до сих пор:

  1. Создал пустую базу данных mySql и предоставил доступ пользователю mySql.

  2. СоздалСтрока подключения mySql в appsettings.json:

    {
      "ConnectionStrings": {
      "DefaultConnection": "Server=(LocalDb)\\MSSQLLocalDB;Database=ManageCarDB;Trusted_Connection=True;MultipleActiveResultSets=true",
      "mySqlConnection": "Server=localhost;port=3306;database=ManageCarDb;uid=dotnetuser;password=dotnetuser"
    },...
    <= I've defined two different connection strings: one for LocalDB, one for MySql
    
  3. Обновлено Startup.cs:

    public void ConfigureServices(IServiceCollection services)
    {
        string env = System.Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
        string connectionString;
        if (!string.IsNullOrEmpty(env) && env.Equals("Linux"))
        {
           connectionString = Configuration.GetConnectionString("mySqlConnection");
            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseMySQL(connectionString));
        }
        else
        {
            connectionString = Configuration.GetConnectionString("DefaultConnection");
            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(connectionString));
        }
    

    <= При запуске будет условно вызываться либо строка подключения MySql / данные MySQLпровайдер или по умолчанию / LocalDB </p>

  4. В Linux:

    1. удалены все двоичные файлы
    2. dotnet restore
    3. dotnet ef migrations add newMigration -c ApplicationDbContext -v

    <= Все это работало ОК </p>

  5. Пытался обновить базу данных:

    dotnet ef database update

    <= <strong>ОШИБКА: Таблица 'ManageCarDb .__ EFMigrationsHistory' не существует

В: Учитывая, что мне нужен один проект для обеих сред EF, я беруправильные шаги?

Или я должен выбрать другой подход?

1 Ответ

0 голосов
/ 28 ноября 2018

Вы должны использовать `Pomelo.EntityFrameworkCore.MySql вместо библиотеки MySql из Oracle.

Я использую Pomelo.EntityFrameworkCore.MySql, и это хорошо работает в моем проекте.

Библиотека MySql из Oracle не являетсяподдерживая миграцию, как я и пытался.Эта библиотека сталкивается с несколькими проблемами

Примечание : я нахожу ссылку, которая говорит об этой проблеме для сайта Oracle

Ошибка: метод или операция нереализованы.во время строительства базы данных MYSQL

https://bugs.mysql.com/bug.php?id=90368

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...