我希望通过代码第一次迁移来更新数据库。例如我在上下文中有3个实体,在数据库中有1个表,当我运行程序并出现此错误时出现问题:已经有表。
迁移配置
position: absolute
top: 50%
left: 50%
transform: translate(-50%, -50%)
IdentityModel
internal sealed class Configuration : DbMigrationsConfiguration<ApplicationDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
// AutomaticMigrationDataLossAllowed = false;
}
protected override void Seed(ApplicationDbContext context)
{
// This method will be called after migrating to the latest version.
}
}
任何帮助?
答案 0 :(得分:3)
在调用更新数据库之前,您是否尝试使用Add-Migration "migration_name"
?或者尝试使用Update-Database -Force
。
否则,我发现了一些可能有用的步骤:
enable-migrations
命令。add-migration
命令以创建初始迁移。update-database
命令将初始迁移应用于数据库。这不会对现有对象进行任何更改(因为Up()方法不包含代码),但它将现有数据库标记为已迁移到初始状态。add-migration
命令以创建新的迁移。新迁移的Up()方法中的代码仅包含对象模型的更改。update-database
命令将更改应用于您的数据库。答案 1 :(得分:0)
这是迁移的常见问题。添加新迁移时,它会将当前代码模型与先前迁移中存储的先前代码模型进行比较。如果这是第一次迁移,它将为所有内容生成代码,因此有时代码会尝试添加已存在的对象。
为了解决这个问题,你可以在迁移的Up()方法中注释掉已经存在的项目的代码,然后应用迁移(update-database)。现在它将正确生成前进的更改。
为防止这种情况发生,您应始终生成数据库的初始快照,而不会产生任何更改:
add-migration MyStartingPoint -IgnoreChanges // ignorechanges flag tells EF to just take snapshot with no code in Up()
以下是有关迁移如何运作的文档"under the hood".