【发布时间】:2017-03-28 14:37:11
【问题描述】:
我想强调的是,这是 .NET Core,关于 EF 6.0 的线程不适用于这个问题
我创建了我的 DbContext 并将其添加到 DI 中,但是当我执行 dotnet ef database update -v 时,它不想创建迁移表 __EFMigrationsHistory。
我应该先执行一些其他命令还是这是 EF Core MySQL 适配器的错误?
MainDbContext
using Microsoft.EntityFrameworkCore;
using MySQL.Data.EntityFrameworkCore.Extensions;
using Web.Models;
namespace Web.Infrastructure
{
public class MainDbContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySQL("connection-string-here");
base.OnConfiguring(optionsBuilder);
}
}
}
错误
正在查找 DbContext 类...
使用上下文“MainDbContext”。
在服务器“localhost”上使用数据库“db”。
MySql.Data.MySqlClient.MySqlException:表 'db.__EFMigrationsHistory' 不存在
表 'db.__EFMigrationsHistory' 不存在 ```
project.json
{
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.1",
"type": "platform"
},
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
"Microsoft.AspNetCore.Mvc": "1.0.1",
"Microsoft.AspNetCore.Razor.Tools": {
"version": "1.0.0-preview2-final",
"type": "build"
},
"Microsoft.AspNetCore.Routing": "1.0.1",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.Logging": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
"BundlerMinifier.Core": "2.2.301",
"WebMarkupMin.AspNetCore1": "2.2.1",
"MySql.Data.EntityFrameworkCore": "7.0.6-IR31",
"Microsoft.EntityFrameworkCore.Design": "1.0.0-preview2-final"
},
"tools": {
"Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
},
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dotnet5.6",
"portable-net45+win8"
]
}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
},
"publishOptions": {
"include": [
"wwwroot",
"**/*.cshtml",
"appsettings.json",
"web.config"
]
},
"scripts": {
"prepublish": [ "bower install", "dotnet bundle" ],
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}
临时解决方案
通过执行dotnet ef migrations script,我得到了可以直接在 MySQL 中执行的 SQL 代码。之后创建迁移表,一切正常。这是一个不好的临时解决方案。我仍然想知道启用迁移的“正确”方式是什么。
【问题讨论】:
-
请指定您使用的包的版本。
-
此连接字符串是否允许您访问有权创建表的帐户?换句话说,您是否可以使用此连接字符串手动创建表?
-
@Deilan 我添加了 packages.json。当然,我拥有数据库的完全权限。一旦我手动添加表迁移工作,我的
User模型表就会为我创建,我可以使用它进行操作。 -
@Stan 我刚刚遇到了同样的问题,ef core + mysql 试图跟随docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/new-db Add-Migrations 工作正常,但 Update-Database 抛出此错误
-
解决方法是在运行“dotnet ef database update”
CREATE TABLE `__EFMigrationsHistory` ( `MigrationId` nvarchar(150) NOT NULL, `ProductVersion` nvarchar(32) NOT NULL, PRIMARY KEY (`MigrationId`) );之前手动创建下表
标签: c# mysql entity-framework entity-framework-core .net-core