.Net Core 2.0 Database First Approach Scaffold-Mysql DB之DbContext
Posted
技术标签:
【中文标题】.Net Core 2.0 Database First Approach Scaffold-Mysql DB之DbContext【英文标题】:.Net Core 2.0 Database First Approach Scaffold-DbContext of Mysql DB 【发布时间】:2018-06-05 18:35:03 【问题描述】:我正在使用 mysql DB 在 .Net Core 2.0 中开发 WEB API。我正在尝试搭建 MySQL 数据库。我已经关注This link (MySQL Official Site),但是当我触发脚手架命令时,我得到了我在下面提到的两个错误,如果我做错了什么,请告诉我。 脚手架命令(在包管理器控制台中触发)
Scaffold-DbContext "server=localhost;port=3306;user=root;password=darshan7826;database=sakila" MySql.Data.EntityFrameworkCore -OutputDir sakila -f
执行上述命令时出错
System.NotImplementedException: The method or operation is not implemented.
at MySql.Data.EntityFrameworkCore.Scaffolding.Internal.MySQLDatabaseModelFactory.Create(String connectionString, IEnumerable`1 tables, IEnumerable`1 schemas)
at Microsoft.EntityFrameworkCore.Scaffolding.Internal.RelationalScaffoldingModelFactory.Create(String connectionString, IEnumerable`1 tables, IEnumerable`1 schemas, Boolean useDatabaseNames)
at Microsoft.EntityFrameworkCore.Scaffolding.Internal.ModelScaffolder.Generate(String connectionString, IEnumerable`1 tables, IEnumerable`1 schemas, String projectPath, String outputPath, String rootNamespace, String contextName, Boolean useDataAnnotations, Boolean overwriteFiles, Boolean useDatabaseNames)
at Microsoft.EntityFrameworkCore.Design.Internal.DatabaseOperations.ScaffoldContext(String provider, String connectionString, String outputDir, String dbContextClassName, IEnumerable`1 schemas, IEnumerable`1 tables, Boolean useDataAnnotations, Boolean overwriteFiles, Boolean useDatabaseNames)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.ScaffoldContextImpl(String provider, String connectionString, String outputDir, String dbContextClassName, IEnumerable`1 schemaFilters, IEnumerable`1 tableFilters, Boolean useDataAnnotations, Boolean overwriteFiles, Boolean useDatabaseNames)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.ScaffoldContext.<>c__DisplayClass0_1.<.ctor>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0`1.<Execute>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
The method or operation is not implemented.
【问题讨论】:
【参考方案1】:你应该运行这个(从 Package-Manager-Console):
Scaffold-DbContext "Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;"
MySql.Data.EntityFrameworkCore -OutputDir Models
或使用:
dotnet ef dbcontext scaffold
注意:您应该在已添加MySql.Data.EntityFrameworkCore
NuGet 包的项目中。
【讨论】:
【参考方案2】:挖掘后我发现 .Net Core 2.0 Mysql 连接器无法正常工作 经过一番搜索和 RnD,我从 Stack Overflow 中找到了Pomelo Foundation,我试了一下,它可以工作。
【讨论】:
【参考方案3】:查看MySQL Connector for .Net的官方源代码,你可以看到它还没有完成,因为:
public DatabaseModel Create(string connectionString,
IEnumerable<string> tables, IEnumerable<string> schemas)
throw new NotImplementedException();
您可能希望在official bug tracker 上打开错误报告。
另外,似乎确实有一个更新的测试版,您可以尝试一下。 https://www.nuget.org/packages/MySql.Data.EntityFrameworkCore/8.0.9-dmr
【讨论】:
大声笑,throw new NotImplementedException();
是相当“标准”的实现。
@Ivan 这也是我实现所有代码的方式,你会惊讶于我写它的速度!
@DavidG 感谢您的回答,能否请您在文件中告诉我我必须添加此块
即使在 2 天前发布的 8.0.10-rc 的最新版本中仍然没有实现 :(
奇怪的是他们有一个版本,这个功能仍然没有实现以上是关于.Net Core 2.0 Database First Approach Scaffold-Mysql DB之DbContext的主要内容,如果未能解决你的问题,请参考以下文章
现在在.net core 2.0当中,有没有连接MySQL数据库的方法
.net core 2.0学习记录:搭建一个.Net Core网站项目