Ошибка переноса EF Core в базу данных Azure MariaDB - PullRequest
0 голосов
/ 20 января 2019

Я пытался создать простой пример для консольного приложения .NET Core и Azure MariaDB, но это не имеет значения, что я делаю.Я все еще получаю одно и то же исключение.

Шаги для воспроизведения

  1. Создание MariaDB в Azure - Учебник Azure MariaDB
  2. Создание консольного приложения (.NET Core) через Visual Studio 2017
  3. Загрузить пакет NuGet - Pomelo.EntityFrameworkCore.MySql
  4. Создать простой код для тестирования

Программный код

using System;
using System.Collections.Generic;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var context = new BloggingContext();

            context.Blogs.Add(new Blog
            {
                BlogId = 0,
                Posts = new List<Post>
                {
                    new Post
                    {
                        BlogId = 5,
                        Title = "Some Title"
                    }
                },
                Url = "Some Url"
            });

            context.SaveChanges();
        }
    }
}

БД Контекстный код

using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;

namespace ConsoleApp1
{
    public class BloggingContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
        public DbSet<Post> Posts { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseMySql("Database=azure-database; Data Source=azure-database.mariadb.database.azure.com; User Id=azure_user@azure-database; Password=azure-password");
        }
    }

    public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }

        public ICollection<Post> Posts { get; set; }
    }

    public class Post
    {
        public int PostId { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }

        public int BlogId { get; set; }
        public Blog Blog { get; set; }
    }
}
Создание миграции с помощью консоли диспетчера пакетов в Visual Studio 2017 (Инициализация добавления-миграции) Обновление базы данных в Azure с помощью консоли диспетчера пакетов в Visual Studio 2017 (Update-Database)

Проблема

Миграция не удалась и не удалась.

Exception message: Failed to read the result set.
Stack trace:
MySql.Data.MySqlClient.MySqlException (0x80004005): Failed to read the result set. ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at MySqlConnector.Protocol.Serialization.ByteArrayReader.ReadLengthEncodedInteger() in C:\projects\mysqlconnector\src\MySqlConnector\Protocol\Serialization\ByteArrayReader.cs:line 124
   at MySqlConnector.Protocol.Serialization.ByteArrayReader.ReadLengthEncodedByteString() in C:\projects\mysqlconnector\src\MySqlConnector\Protocol\Serialization\ByteArrayReader.cs:line 155
   at MySqlConnector.Protocol.Payloads.OkPayload.Create(ReadOnlySpan`1 span, Boolean deprecateEof) in C:\projects\mysqlconnector\src\MySqlConnector\Protocol\Payloads\OkPayload.cs:line 47
   at MySqlConnector.Core.ResultSet.ReadResultSetHeaderAsync(IOBehavior ioBehavior) in C:\projects\mysqlconnector\src\MySqlConnector\Core\ResultSet.cs:line 47
   at MySql.Data.MySqlClient.MySqlDataReader.ActivateResultSet(ResultSet resultSet) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlDataReader.cs:line 80
   at MySql.Data.MySqlClient.MySqlDataReader.ReadFirstResultSetAsync(IOBehavior ioBehavior) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlDataReader.cs:line 302
   at MySql.Data.MySqlClient.MySqlDataReader.CreateAsync(MySqlCommand command, CommandBehavior behavior, ResultSetProtocol resultSetProtocol, IOBehavior ioBehavior) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlDataReader.cs:line 287
   at MySqlConnector.Core.TextCommandExecutor.ExecuteReaderAsync(String commandText, MySqlParameterCollection parameterCollection, CommandBehavior behavior, IOBehavior ioBehavior, CancellationToken cancellationToken) in C:\projects\mysqlconnector\src\MySqlConnector\Core\TextCommandExecutor.cs:line 37
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQueryAsync(IOBehavior ioBehavior, CancellationToken cancellationToken) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlCommand.cs:line 261
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery() in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlCommand.cs:line 62
   at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlDatabaseCreator.<>c__DisplayClass18_0.<Exists>b__0(DateTime giveUp)
   at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.<>c__DisplayClass12_0`2.<Execute>b__0(DbContext c, TState s)
   at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
   at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Execute[TState,TResult](IExecutionStrategy strategy, Func`2 operation, Func`2 verifySucceeded, TState state)
   at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists()
   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
   at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)

Дополнительные технические сведения

  • MariaDBверсия: 10.2.17
  • Pomelo.EntityFrameworkCore.MySql версия: 2.1.4
  • Microsoft.NETCore.App версия: 2.2.0

Другиеинформация Когда я попробовал это с официальной библиотекой MySQL, все работало.

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