【问题标题】:How to auto generate the MigrationBuilder from an existent DB如何从现有数据库自动生成 MigrationBuilder
【发布时间】:2016-09-16 06:50:54
【问题描述】:

我正在创建一个 Asp.Net Core 项目。该项目带有一个用于迁移的文件。该文件将生成我的数据库。但我在数据库中有一些表,我想像示例中一样创建迁移文件。

示例:

migrationBuilder.CreateTable(
               name: "AspNetRoles",
               columns: table => new
               {
                Id = table.Column<string>(nullable: false),
                ConcurrencyStamp = table.Column<string>(nullable: true),
                Name = table.Column<string>(maxLength: 256, nullable: true),
                NormalizedName = table.Column<string>(maxLength: 256, nullable: true)
              },
              constraints: table =>
              {
                    table.PrimaryKey("PK_AspNetRoles", x => x.Id);
              });

如果我有一个现有的表。如何创建此文件?

【问题讨论】:

  • 您的问题不清楚?您需要在迁移脚本之上运行还是重新创建它?

标签: c# asp.net entity-framework asp.net-core


【解决方案1】:

MigrationBuilder 仅存在于 EntityFramworkCore 中。请注意 EntityFramworkCore 和 EntityFramwork 6.x 之间的区别。 EntityFramworkCore 的文档是here。可以解决你问题的教程是here

  1. 像这样运行:

    Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer

    从数据库中对模型进行逆向工程。这还将为您生成模型快照和迁移(不太确定,如果不是自己运行 Add-Migration)。

  2. 如果需要,将现有模型与自动生成的模型合并。
  3. 运行Add-MigrationUpdate-Database

现在您获得了迁移文件,并且您的模型和数据库已同步。

此外,值得看看Feature Comparesion 以了解 EntityFramworkCore 不支持的内容。到目前为止, EntityFramworkCore 没有 EntityFramwork 6.x 拥有的许多 GUI 工具。例如,您不能使用其他答案中提到的 Entity Data Model Wizard。如果你不小心使用了 GUI 工具,它会默认生成 EntityFramwork 6.x 相关的东西。因此,您必须在 Visual Studio 的 Package Manager Console 中使用 cmdlet 来执行此类任务。

【讨论】:

    【解决方案2】:

    首先,您需要决定采用 DbFirst 还是 CodeFirst 的方法。文件可以自动生成,也可以手动修改。

    我建议使用 CodeFirst,因为它可以最大程度地控制您的模型和 dbcontext。

    步骤 1:使用现有数据库创建 codefirst 模型。

    第 2 步:现在在包管理器控制台中输入 enable-migrations

    第 3 步:使用 (db) 上下文和从数据库表生成的模型。更改您的模型

    第 4 步:在包管理器控制台中键入 add-migration [用于标识迁移的名称]

    第五步:检查生成的迁移文件。

    第 6 步:在包管理器控制台中输入 update-database

    现在您的更改已更新到数据库。从现在开始,您可以使用 codefirst 方法来处理对数据库的更改。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2015-08-04
      • 1970-01-01
      • 2020-08-02
      • 2021-09-05
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      相关资源
      最近更新 更多