如何为 EF 6.4 和 MySQL C# 启用迁移?
How to enable migration for EF 6.4 and MySQL C#?
我尝试使用命令
启用迁移
Enable-Migrations
但是我得到了下面的错误,我不是很明白如何解决...
我安装了所有扩展以使其正常工作。
错误信息:
Checking if the context targets an existing database...
No MigrationSqlGenerator found for provider 'MySql.Data.MySqlClient'. Use the SetSqlGenerator method in the target migrations configuration class to register additional SQL generators.
我假设您的项目是 .net 核心应用程序并且您正在使用 visual studio。
- 确保您已 Microsoft.Entityframeworkcore.tools 从 Nuget 包管理器安装。
- 从您的包管理器控制台,您不需要像以前在 ef 5 中那样启用迁移
- 只需 运行 添加迁移 {MigrationName}
- 运行 Update-Database 更新数据库
或
- 如果 AppDbContext 与启动文件在同一个项目中
- 运行 dotnet ef 迁移添加 {MigrationName}
- 运行 dotnet ef -database update 更新数据库
或
- 如果AppDbContext在不同的项目中,从命令行打开包含的项目根目录
- 运行 dotnet ef migrations add {MigrationName} --s ../{startupproject}/{startupproject.csproj}
- 运行 dotnet ef -database update 更新数据库 --s ../{startupproject}/{startupproject.csproj}
如错误消息所述,您需要先更改 MigrationSqlGenerator。
https://docs.microsoft.com/en-us/ef/ef6/fundamentals/configuring/code-based
您可以通过两种方式完成:
修改 App.Config
中的 entityFramework 部分
<entityFramework codeConfigurationType="MyNamespace.MyDbConfiguration, MyAssembly">
...Your EF config...
</entityFramework>
或将 DbConfigurationType 属性添加到继承的 DbContext class
[DbConfigurationType("MyNamespace.MyDbConfiguration, MyAssembly")]
public class MyContextContext : DbContext
{
}
对于 MySql.Data.Entity -> MySql.Data (>= 6.10.9)
<entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.10.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
...other providers
</providers>
</entityFramework>
//
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6))]
public class DemoContext : DbContext
{
}
对于 MySql.Data.Entity 框架 -> MySql.Data (>= 8.0.20)
<entityFramework codeConfigurationType="MySql.Data.EntityFramework.MySqlEFConfiguration, MySql.Data.EntityFramework">
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.20.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
...other providers
</providers>
</entityFramework>
//
[DbConfigurationType(typeof(MySql.Data.EntityFramework.MySqlEFConfiguration, MySql.Data.EntityFramework))]
public class DemoContext : DbContext
{
}
我尝试使用命令
启用迁移Enable-Migrations
但是我得到了下面的错误,我不是很明白如何解决...
我安装了所有扩展以使其正常工作。
错误信息:
Checking if the context targets an existing database...
No MigrationSqlGenerator found for provider 'MySql.Data.MySqlClient'. Use the SetSqlGenerator method in the target migrations configuration class to register additional SQL generators.
我假设您的项目是 .net 核心应用程序并且您正在使用 visual studio。
- 确保您已 Microsoft.Entityframeworkcore.tools 从 Nuget 包管理器安装。
- 从您的包管理器控制台,您不需要像以前在 ef 5 中那样启用迁移
- 只需 运行 添加迁移 {MigrationName}
- 运行 Update-Database 更新数据库
或
- 如果 AppDbContext 与启动文件在同一个项目中
- 运行 dotnet ef 迁移添加 {MigrationName}
- 运行 dotnet ef -database update 更新数据库
或
- 如果AppDbContext在不同的项目中,从命令行打开包含的项目根目录
- 运行 dotnet ef migrations add {MigrationName} --s ../{startupproject}/{startupproject.csproj}
- 运行 dotnet ef -database update 更新数据库 --s ../{startupproject}/{startupproject.csproj}
如错误消息所述,您需要先更改 MigrationSqlGenerator。 https://docs.microsoft.com/en-us/ef/ef6/fundamentals/configuring/code-based
您可以通过两种方式完成:
修改 App.Config
中的 entityFramework 部分<entityFramework codeConfigurationType="MyNamespace.MyDbConfiguration, MyAssembly">
...Your EF config...
</entityFramework>
或将 DbConfigurationType 属性添加到继承的 DbContext class
[DbConfigurationType("MyNamespace.MyDbConfiguration, MyAssembly")]
public class MyContextContext : DbContext
{
}
对于 MySql.Data.Entity -> MySql.Data (>= 6.10.9)
<entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.10.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
...other providers
</providers>
</entityFramework>
//
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6))]
public class DemoContext : DbContext
{
}
对于 MySql.Data.Entity 框架 -> MySql.Data (>= 8.0.20)
<entityFramework codeConfigurationType="MySql.Data.EntityFramework.MySqlEFConfiguration, MySql.Data.EntityFramework">
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.20.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
...other providers
</providers>
</entityFramework>
//
[DbConfigurationType(typeof(MySql.Data.EntityFramework.MySqlEFConfiguration, MySql.Data.EntityFramework))]
public class DemoContext : DbContext
{
}