我正在尝试清理旧项目,因为它已移入MVC5,我需要在迁移之前更改大量值。例如,字符串Y需要变为1。
看起来像是
public override void Up()
{
Sql(@"
UPDATE [pgm].[dbo].[t_openposition] SET breakfast = 0 WHERE breakfast='N';);
AlterColumn("dbo.t_openposition", "breakfast", c => c.Boolean(nullable: false));
}
public override void Down()
{
AlterColumn("dbo.t_openposition", "discount", c => c.String(maxLength: 255, unicode: false));
}
接下来,当我运行update-database时,它会失败并警告我需要添加迁移,因为事情已经发生了变化。但是,如果我运行add-migration,它会删除Sql()
的块答案 0 :(得分:0)
关于Add-Migration
的问题是,它为您自动生成该文件,即timestamp_name_migration.cs
。因此,当您运行Add-Migration NameOfMigration
并且之前已运行Add-Migration NameOfMigration
时,将再次生成该文件,并且您编写的任何代码都将丢失。迁移的关键在于所有这些都是为你完成的,你不应该做任何SQL。这就解释了为什么你会失去那条线。
对于错误,在您的情况下,只要执行第一个SQL语句,模型就不再与数据库匹配,EF将不会继续并抛出该错误。这个想法是他们总是同步。
我发现您正在尝试编辑数据库(而不是丢失数据)并更改架构(看起来像string
到bool
的列。)
如果您无法修改数据库,我建议使用以下内容:
在SSMS中小心地执行所有这些语句,直到您满意为止,然后对数据库模型进行逆向工程(#3 https://msdn.microsoft.com/en-us/library/jj200620(v=vs.113).aspx)并删除旧的代码。这将为您提供一个新的代码第一个模型,它将与数据库保持同步,一切都会很好。
如果你可以核对数据库:
__MigrationHistory
。Configuration
方法删除排除 Seed
课程的所有迁移。Add-Migration Initial
Update-Database
然后一切都会好起来的。