Bug #106592 Unable to do Entity Framework Core Migration after migrating to version 6.0.0
Submitted: 28 Feb 2022 6:08 Modified: 21 Jul 2022 5:49
Reporter: Gerard Ang Email Updates:
Status: Verified Impact on me:
None 
Category:Connector / NET Severity:S3 (Non-critical)
Version:6.0.0+MySQL8.0.28 OS:Windows
Assigned to: CPU Architecture:Any
Tags: 6.0.0, C#, nuget

[28 Feb 2022 6:08] Gerard Ang
Description:
I was using the Nuget Package for MySql.EntityFrameworkCore package version 5.0.8+MySQL8.0.27.

I was able to do Entity Framework Core Migration with no issues.

As I am moving towards .NET 6, I wanted to try the new packages offered.

After some development and installing package version 6.0.0+MySQL8.0.28, I tried to do an add-migration command.

However, I was thrown the following error from Visual Studio:
Unable to resolve service for type 'Microsoft.EntityFrameworkCore.Storage.TypeMappingSourceDependencies' while attempting to activate 'MySql.EntityFrameworkCore.Storage.Internal.MySQLTypeMappingSource'.

How to repeat:
1) Install MySql.EntityFrameworkCore package version 5.0.8+MySQL8.0.27
2) Create some new code-first models
3) Run add-migration command
4) Add some more new code-first models
5) Upgrade MySql.EntityFrameworkCore package version 6.0.0+MySQL8.0.28
6) Run add-migration command

Exception thrown.
[3 Mar 2022 15:30] Clint Andrews
Exception is thrown even if you remove all existing migrations and create a new initial migration.
[4 Mar 2022 2:03] Gerard Ang
Hi Clint,

Yes, the exception is still thrown even if I remove the contents of the Migration folder and do an Add-Migration for the new first initial migration.
[18 Apr 2022 3:24] Gerard Ang
Anyone with any updates on this? I understand that .NET 5 EOL is coming up soon, so I am wondering if I should downgrade to a .NET Core 3.1 library, if there is no solution for it.
[18 Apr 2022 13:11] Clint Andrews
We ended up migrating to Pomelo version of the nuget package. This did require some updates to the Context but migrations are working.

I hope this gets addressed soon.
[21 Apr 2022 13:31] MySQL Verification Team
Bug #107022 marked as duplicate of this one.
[5 Jul 2022 8:49] Peter Kjaer
I am having the same issue and it's blocking the upgrade to .NET 6 for us. The only solution I have been able to find is switching to Pomelo...
[19 Jul 2022 17:42] Patrick Allen
Is anybody working on this? 

Submitted 4.5 months ago and still "Analyzing"?
[21 Jul 2022 5:49] MySQL Verification Team
Hello,

Thank you for the bug report and feedback.
Verified as described.

Regards,
Ashwini Patil
[16 Aug 2022 9:44] Adam Croot
This issue has been blocking me for weeks now, so I did some investigation, and this seems to workaround/fix the issue. Add this as a DesignTimeService. 

public class MysqlEntityFrameworkDesignTimeServices : IDesignTimeServices
{
    public void ConfigureDesignTimeServices(IServiceCollection serviceCollection)
    {
        serviceCollection.AddEntityFrameworkMySQL();
        new EntityFrameworkRelationalDesignServicesBuilder(serviceCollection)
            .TryAddCoreServices();
    }
}

The key to this is the TryAddCoreServices(). Looking at the documentation of EntityFrameworkRelationalDesignServicesBuilder: https://docs.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.design.entityfra... 

It was introduced in 6.0 and the notes say this:

> Providers should create an instance of this class, use its methods to register services, and then call TryAddCoreServices() to fill out the remaining Entity Framework services.

Looking in the source, I don't see any use of EntityFrameworkRelationalDesignServicesBuilder

Maybe this is why? 

Few notes:
1) I don't fully understand EF enough to know why this "fixes" the issue but I referenced this issue: https://github.com/FirebirdSQL/NETProvider/issues/1025 
2) The first migration that worked with the above, generated a migration where it wanted to change all of my "text" (string) fields to longtext as below

migrationBuilder.AlterColumn<string>(
                name: "Name",
                table: "Table",
                type: "longtext",
                nullable: true,
                oldClrType: typeof(string),
                oldType: "text",
                oldNullable: true);

I don't know if this is to be expected or what caused this. 

3) FWIW, The error is also reproducible using the context's in the tests 

Your mileage may vary; I need to check what happened in point 2. Does anybody know if this was by design? These properties were just declared as below, so I assume this is by design, but I can't find a release note mentioning it. 

public string Name { get; set; }

Adam