C# 如何使用.net核心实体框架迁移更新表(而不是重新创建表)

C# 如何使用.net核心实体框架迁移更新表(而不是重新创建表),c#,.net-core,entity-framework-core,asp.net-core-2.0,C#,.net Core,Entity Framework Core,Asp.net Core 2.0,我已连接到一个没有任何标识的现有SQL数据库,例如没有aspNetUser表等。此后,我使用这样的自定义登录类添加了这些数据库 public class UserLogin : IdentityUser { public int LanguageId { get; set; } public string HQ_PRM_Id { get; set; } } 然后我生成了一个迁移来创建这样的表(我刚刚称之为identity) “dotnet ef迁移添

我已连接到一个没有任何标识的现有SQL数据库,例如没有aspNetUser表等。此后,我使用这样的自定义登录类添加了这些数据库

public class UserLogin : IdentityUser
{       
    public int LanguageId { get; set; }
    public string HQ_PRM_Id { get; set; }       
}
然后我生成了一个迁移来创建这样的表(我刚刚称之为identity)

“dotnet ef迁移添加标识”

然后,我使用

“dotnet ef数据库更新标识”

这创造了所有的好桌子。但是,我忘了向后来添加的用户类添加firstname和lastname。问题是当我运行我的新迁移时,它说

数据库中已存在名为“AspNetRoles”的对象

我如何告诉迁移更新模式而不是尝试重新创建表?否则我必须先手动删除对象。。这意味着丢失数据


感谢在开发过程中,模型经常更改,这些模型(表示数据库表)与表本身不同步。迁移的作用是使数据库和模型保持同步,因此无论何时对模型进行更改,都必须创建新的迁移以增量更新数据库架构

初始迁移
dotnet ef migrations add Identity
-此命令创建名为Identity的新迁移

dotnet ef database update Identity
-此命令将运行迁移,包括名为“Identity”的迁移

第二次迁移
dotnet ef migrations add AddNames
-此命令创建一个名为AddNames的新迁移,ef应识别该迁移是对现有表的更新(因此,迁移应仅为和更新)

dotnet ef数据库更新AddNames
-然后将运行AddNames迁移


我绝对建议检查主题上的

使用新属性更新对象并创建新迁移。这将检测到该表已经存在,并创建一个只更新现有表的脚本。不幸的是,它没有这样做,生成的迁移代码会识别其他列,但尝试再次创建该表,而不是更新。您是如何创建第二次迁移的?与上次相同,使用“dotnet ef迁移添加标识“您希望使用不同的名称创建第二次迁移,即使在添加具有不同名称的新迁移时,它仍会尝试重新创建其他表。例如,新的迁移文件只引用我添加的列,但ContextModelSnapshot.cs仍然像往常一样引用其他表。我得到了一个aspNetRoles的“object ready exisis”,它没有改变。ContextModelSnapshot类是模型的当前状态。创建第一次迁移时,该文件将添加到“迁移”文件夹中,并在每次后续迁移时更新。它使迁移框架能够计算使数据库与模型保持最新所需的更改。e、 g创建新迁移时,它将检查快照以查看数据库的当前状态,发现表已存在,并创建更新现有表的迁移。听起来您的ContextModelSnapshot.cs正在做它想要做的事情,这些信息在您运行什么命令来运行迁移中?您是否检查了在th
\uuu EFMigrations
表中针对您的数据库运行的迁移?因此,我在\uuu EFMigrationsHistory表中显示了上一次名为Identity的迁移。这是最初的一个。然后我添加了一个列并创建了一个名为AddPasswordChangeColumn的迁移。20191114125408_AddPasswordChangeColumn.cs文件有UP和Down方法,UP方法只添加了一列,这很好。但是,当我针对它进行更新时,它仍然尝试创建另一个自身份迁移以来未更改的表。
public class UserLogin : IdentityUser
{       
    public int LanguageId { get; set; }
    public string HQ_PRM_Id { get; set; }       
}
public class UserLogin : IdentityUser
{       
    public int LanguageId { get; set; }
    public string HQ_PRM_Id { get; set; }
    public string FirstName { get; set; }       
    public string LastName { get; set; }            
}