C# EF Core 5在迁移中创建两次表

C# EF Core 5在迁移中创建两次表,c#,entity-framework-core,entity-framework-core-5,C#,Entity Framework Core,Entity Framework Core 5,我已经创建了一个项目和一个迁移,但是在添加新的迁移时,迁移似乎并不关心以前的迁移,也就是说,迁移文件只是尝试创建相同的表两次 我创建了两个迁移,第一个和第二个。改变的是我在Post实体中添加了一个字符串属性(此处未显示)。我所期望的是如下所示: migrationBuilder.AddColumn(...) 但是我得到了一个第二次迁移,它包含了第一次迁移的所有内容,但是在创建表Post时,它添加了一个列。这几乎就像它根本不在乎有一个第一次迁移,因此它的行为就像是有史以来的第一次迁移 首先 pu

我已经创建了一个项目和一个迁移,但是在添加新的迁移时,迁移似乎并不关心以前的迁移,也就是说,迁移文件只是尝试创建相同的表两次

我创建了两个迁移,
第一个
第二个
。改变的是我在
Post
实体中添加了一个字符串属性(此处未显示)。我所期望的是如下所示:

migrationBuilder.AddColumn(...)
但是我得到了一个
第二次
迁移,它包含了
第一次
迁移的所有内容,但是在创建表
Post
时,它添加了一个列。这几乎就像它根本不在乎有一个
第一次
迁移,因此它的行为就像是有史以来的第一次迁移

首先

public partial class First : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.CreateTable(
            name: "AspNetRoles",
            columns: table => new
            {
                Id = table.Column<string>(type: "nvarchar(450)", nullable: false),
                Name = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
                NormalizedName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
                ConcurrencyStamp = table.Column<string>(type: "nvarchar(max)", nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AspNetRoles", x => x.Id);
            });
    ...
公共部分类优先:迁移
{
受保护的覆盖作废(MigrationBuilder MigrationBuilder)
{
migrationBuilder.CreateTable(
名称:“AspNetRoles”,
列:表=>new
{
Id=table.Column(类型:“nvarchar(450)”,可为空:false),
Name=table.Column(类型:“nvarchar(256)”,maxLength:256,null:true),
NormalizedName=table.Column(类型:“nvarchar(256)”,maxLength:256,null:true),
ConcurrencyStamp=table.Column(类型:“nvarchar(max)”,可为空:true)
},
约束:表=>
{
表.PrimaryKey(“PK_AspNetRoles”,x=>x.Id);
});
...

public partial class Second : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.CreateTable(
            name: "AspNetRoles",
            columns: table => new
            {
                Id = table.Column<string>(type: "nvarchar(450)", nullable: false),
                Name = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
                NormalizedName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
                ConcurrencyStamp = table.Column<string>(type: "nvarchar(max)", nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AspNetRoles", x => x.Id);
            });
    ...
公共部分类第二:迁移
{
受保护的覆盖作废(MigrationBuilder MigrationBuilder)
{
migrationBuilder.CreateTable(
名称:“AspNetRoles”,
列:表=>new
{
Id=table.Column(类型:“nvarchar(450)”,可为空:false),
Name=table.Column(类型:“nvarchar(256)”,maxLength:256,null:true),
NormalizedName=table.Column(类型:“nvarchar(256)”,maxLength:256,null:true),
ConcurrencyStamp=table.Column(类型:“nvarchar(max)”,可为空:true)
},
约束:表=>
{
表.PrimaryKey(“PK_AspNetRoles”,x=>x.Id);
});
...

正如您所看到的,它们是相同的,为什么会发生这种情况?

由于某种原因,visual studio for mac再次捉弄了我。以下几行已添加到我的csproj文件中

<Compile Remove="Migrations\MainDbContextModelSnapshot.cs" />
<Compile Remove="Migrations\20210102195131_Test1.Designer.cs" />
<Compile Remove="Migrations\20210102195131_Test1.cs" />

现在一切都明白了,为什么它尝试从头开始创建所有内容,因为没有快照。无论如何,如果其他人发生这种奇怪的事情,您可能需要查看您的csproj文件中的内容。我无法解释为什么添加了这些内容


解决方案是,如果您看到这些行,只需删除它们,一切都应按预期工作。

好-在生成第二行之前,您是否将第一行迁移应用到您的数据库?@marc_s是的,我得到了迁移列表,它将第二行显示为(待定)。但为什么需要这样做?对我来说,它可以找出自上次迁移以来发生的变化,而不是实际数据库中发生的变化,这是有道理的。@marc_s我发现了这个问题,非常奇怪,但事后看来,它可以解释为什么一切都表现得如此奇怪。