Sta*_*tan 25 c# mysql entity-framework entity-framework-core .net-core
我想强调这是.NET Core,而关于EF 6.0的线程不适用于这个问题
我创建了我的DbContext并将其添加到DI中,但是当我这样做dotnet ef database update -v时不想创建迁移表__EFMigrationsHistory.
是否还有其他一些我应该先做的命令,或者这是EF Core MySQL适配器的错误?
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
查找DbContext类...
使用上下文'MainDbContext'.
在服务器'localhost'上使用数据库'db'.
MySql.Data.MySqlClient.MySqlException:表'db .__ EFMigrationsHistory'不存在
表'db .__ EFMigrationsHistory'不存在```
{
"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%" ]
}
}
Run Code Online (Sandbox Code Playgroud)
通过执行dotnet ef migrations script我得到的SQL代码,我可以直接在MySQL中执行.之后,创建了迁移表并且一切正常.这是临时解决方案,这很糟糕.我仍然想知道启用迁移的"正确"方法是什么.
Der*_*ick 44
将Mark G的评论转变为答案.
创建__EFMigrationsHistory表后,应运行其余更新.
CREATE TABLE `__EFMigrationsHistory` ( `MigrationId` nvarchar(150) NOT NULL, `ProductVersion` nvarchar(32) NOT NULL, PRIMARY KEY (`MigrationId`) );
Run Code Online (Sandbox Code Playgroud)
或者,生成迁移脚本并在程序包管理器控制台中使用此命令手动应用于数据库:
Script-Migration
Run Code Online (Sandbox Code Playgroud)
如果需要生成所有脚本,可以使用以下命令:
Script-Migration -from 0
Run Code Online (Sandbox Code Playgroud)
Peu*_*ski 16
使用标准Oracle提供程序时遇到同样的问题.
根据这个问题,Dot Net Entity Framework数据库更新不会在mysql数据库中创建表,但它还没有实现迁移功能.
我按照建议切换到SapientGuardian提供商,它似乎是现在最好的方式.
编辑:正如评论中所建议的那样.Pomelo是2018年开局的最佳选择.自从我的原始答案以来,我选择了其他提供商.
小智 8
我遇到了同样的问题,OP上下文可能略有不同,但为了完整起见,这是我的答案.
遇到此问题的方法之一是:
在这种情况下,您将收到OP报告的错误
MySql.Data.MySqlClient.MySqlException:表'db .__ EFMigrationsHistory'不存在
在这种情况下,解决方案是删除整个数据库.之后,update-databse命令运行成功.
我不确定它是否只与mysql有关,但要恢复:
| 归档时间: |
|
| 查看次数: |
14708 次 |
| 最近记录: |