我已经搞砸了我的迁移,我用于IgnoreChanges初始迁移,但现在我想要删除所有迁移,并开始使用所有逻辑进行初始迁移.
当我删除文件夹中的迁移并尝试Add-Migration它并不生成一个完整的文件(它是空的 - 因为我上次没有做任何更改,但现在已删除,迁移).
是否有任何Disable-Migrations命令,所以我可以重新运行Enable-Migrations?
我使用迁移(EF 5.0)和代码优先有一个有趣的效果:
我用GUID主键创建了一些模型.(顺便说一句:对我来说,SQL Server使用它很重要NEWSEQUENTIALID(),这似乎是当前版本中的默认值)
在某些时候,我激活了迁移.我在初始迁移中添加了一些代码,这主要是.Index()根据需要.
当我删除数据库并调用update-database时,出现以下错误:
无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移.将挂起的模型更改写入基于代码的迁移或启用自动迁移.将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移.您可以使用Add-Migration命令将挂起的模型更改写入基于代码的迁移.
我尝试过AutomaticMigrationsEnabled = true,无需更改或添加任何内容即可使用!
但既然我不想要AutomaticMigrationsEnabled,我也尝试再次删除数据库,update-database然后调用add-migration.我最终得到了一个似乎没有改变任何东西的额外迁移(见下文).我也尝试将这些行添加到初始迁移的底部 - 但这并没有改变任何东西.
其中一个型号:
[Table(Speaker.TABLENAME)]
public class Speaker : BaseModel
{
public const String TABLENAME = "Speaker";
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
[Required]
[MaxLength(50, ErrorMessage = "Name must be 50 characters or less")]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
初始迁移代码:
public partial class InitialCreate : DbMigration
{
public override void Up()
{ …Run Code Online (Sandbox Code Playgroud) 使用程序包管理器控制台时,可以运行以下命令:
PM> Update-Database -Verbose
Run Code Online (Sandbox Code Playgroud)
该-Verbose交换机将所有尝试的SQL命令写入控制台窗口,这对于调试是非常有用的.
您可以使用DbMigrator该类在代码中执行相同的操作:
Configuration config = new Configuration();
//... (set up the config object)
DbMigrator migrator = new DbMigrator(config);
migrator.Update();
Run Code Online (Sandbox Code Playgroud)
-Verbose如果你使用这DbMigrator门课,有没有类似开关的东西?我查看了整个文档,但找不到任何东西.