EF Core MySQL 数据库优先?

4

我在亚马逊云中拥有一个MySQL数据库(RDS)。 它只有一个表格,非常小。

我想使用EF Core,Database First。 我知道Pomelo.EntityFrameworkCore.MySql包很受欢迎,但我找不到任何关于如何通过该包实现Db Context的生成的信息。

我按照这里的说明同时将 MySql.Data.EntityFrameworkCore.Design替换为Pomelo.EntityFrameworkCore.MySql,但是当我在Package Manager Console中运行下面的命令时:

Scaffold-DbContext "Server=my-db.rds.amazonaws.com;database=TestDb;uid=blah;pwd=blah;" Pomelo.EntityFrameworkCore.MySql -OutputDir Models -f

我刚刚遇到了这个错误:

指定的框架版本“2.0”无法解析

我缺少了什么?这是我的虚拟解决方案的样子:

screenshot of solution


也许这是一个错误,请将EF Core更新至最低2.0.2版本并重试。根据我在您提供的文章中所看到的,您还需要安装MySql.Data.EntityFrameworkCore。一种方法是按照说明从头开始,然后采用DB first方法。 - ChW
请注意,EF Core 确实不支持“数据库优先”方法。 Zameer 的答案中提到的 Scaffold-DbContext 方法将基于现有数据库创建 DbContext 和 Models,但是在脚手架之后,您需要继续使用“Code First”,因为没有方法可以使用 db 更改更新 DbContext。 - Valuator
3个回答

3
您需要在.csproj文件中包含以下引用。当然,版本可能会有所不同。
<ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.0-preview2-final" />
    <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.0.1" />
    <PackageReference Include="Pomelo.EntityFrameworkCore.MySql.Design" Version="1.1.2" />
</ItemGroup>

<ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.1.0-preview1-final" />
</ItemGroup>

注意: 我不得不手动将DotNetCliToolReference添加到Microsoft.EntityFrameworkCore.Tools.DotNet中(而不是通过Visual StudioManage Nuget Packages视图)


3

在2020年,随着.NET Core 3的发布,很多事情都发生了变化,下面是当前适用的情况:)

确保您安装了所有这些包

<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.1">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="3.1.1" />
    <PackageReference Include="Pomelo.EntityFrameworkCore.MySql.Design" Version="1.1.2" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.1" />

现在dotnet ef是一个需要安装的全局工具,参考

dotnet tool install --global dotnet-ef

然后运行这个命令,参考

dotnet ef dbcontext scaffold "Server=localhost;Database=ef;User=root;Password=123456;TreatTinyAsBoolean=true;" "Pomelo.EntityFrameworkCore.MySql"

若要在不同路径中进行脚手架,请使用 --output-dir

dotnet ef dbcontext scaffold server=localhost;port=3306;database=palle2patnam;uid=root;password=password" "Pomelo.EntityFrameworkCore.MySql" --output-dir Models

如果需要从数据库中强制获取新字段,您可以添加--force参数。

dotnet ef dbcontext scaffold "server=localhost;port=3306;database=palle2patnam;uid=root;password=password" "Pomelo.EntityFrameworkCore.MySql" --output-dir Models --force

-1

通过选择 Package Manager Console 或从 Tools 中的 NuGet Package Manager 菜单选择 Manage NuGet Packages for Solution,安装以下 NuGet 包:

Microsoft.EntityFrameworkCore.Tools 版本 2.0.1 (用于 EF Core 2.0)

Pomelo.EntityFrameworkCore.MySql 版本 2.0.1

安装以上内容后,在 Package Manager Console 中运行以下命令:

Scaffold-DbContext "在此添加你的连接字符串" Pomelo.EntityFrameworkCore.MySql -OutputDir Models -f


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接