EF Core migration to the Azure MariaDB database fail

0

I tried to create simple example for .NET Core console application and Azure MariaDB, but it does not matter what I do. I still get one and the same exception.

Steps to reproduce

  1. Create MariaDB on Azure - Azure MariaDB Tutorial
  2. Create Console App (.NET Core) via Visual Studio 2017
  3. Download NuGet package - Pomelo.EntityFrameworkCore.MySql
  4. Create simple code for testing

Program code

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();
        }
    }
}

DB Context code

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; }
    }
}
  1. Create Migration via Package Manager Console in Visual Studio 2017 (Add-Migration Inititial)
  2. Update database on Azure via Package Manager Console in Visual Studio 2017 (Update-Database)

The issue

The migration was unsuccessful and failed.

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)

Further technical details

  • MariaDB version: 10.2.17
  • Pomelo.EntityFrameworkCore.MySql version: 2.1.4
  • Microsoft.NETCore.App version: 2.2.0

Other information When I tried it with an official MySQL library everything worked.

mysql
azure
.net-core
visual-studio-2017
mariadb
asked on Stack Overflow Jan 20, 2019 by Majkl

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0