如何从现有DB自动生成MigrationBuilder

时间:2016-09-16 06:50:54

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

我正在创建一个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);
              });

如果我有一张现有的表格。我该如何创建这个文件?

2 个答案:

答案 0 :(得分:0)

首先,您需要决定使用哪种方法进行DbFirst或CodeFirst。文件可以自动生成,然后您也可以手动更改文件。

我建议使用CodeFirst,因为它提供了对模型和dbcontext的最大控制。

步骤1:使用现有数据库创建codefirst模型。 codefirst model using the existing database

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

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

步骤4:在包管理器控制台中键入add-migration [某些名称以标识迁移]

步骤5:检查生成的迁移文件。

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

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

希望这有帮助!

答案 1 :(得分:0)

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
  4. 现在您可以获得迁移文件,您的模型和数据库也是同步的。

    此外,值得一看Feature Comparesion以了解EntityFramworkCore不支持的内容。到现在, EntityFramworkCore没有EntityFramwork 6.x所具有的许多GUI工具。例如,您无法使用其他答案中提到的实体数据模型向导。如果您意外使用GUI工具,它将默认生成EntityFramwork 6.x相关的东西。因此,您必须在Visual Studio中的程序包管理器控制台中使用cmdlet执行此类任务。