我以前的模型没有任何DataNotations,但我最近改变了这一点,对某些属性应用[Required]。发生这种情况时,我的迁移代码开始抛出异常,例如:
无法应用挂起的更改,因为自动迁移是 禁用。要启用自动迁移,请确保 DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true。
我认为必须完成一些明确的迁移操作。请澄清。
编辑:对于我来说,AutomaticMigrationsEnabled = true不是我的选项,我很有兴趣如何通过一些迁移脚本实现这一点。
答案 0 :(得分:2)
添加一个扩展DbMigrationsConfiguration的Configuration类并将AutomaticMigrationsEnabled设置为true,示例类看起来像这样
namespace yournamespace
{
using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
internal sealed class Configuration : DbMigrationsConfiguration<YourDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
}
}
}
然后将配置类添加到DbMigrator实例,如下所示
namespace yournamespace
{
public class YourDataMigrator
{
public void MigrateData()
{
DbMigrationsConfiguration configuration=new Configuration();
DbMigrator dbMigrator = new DbMigrator(configuration);
try
{
dbMigrator.Update();
}
catch (Exception ex)
{
throw ex;
}
}
}
}
我认为这可以解决您的问题
答案 1 :(得分:1)
您可以通过执行以下脚本在程序包管理器控制台中创建迁移脚本:
PM> Enable-Migrations
接着是
PM> Add-Migration Initial
接着是
PM> Update-Database
最初在此处找到:http://www.snippetsource.net/Snippet/146/enable-automatic-migrations-in-ef-codefirst-c
答案 2 :(得分:0)
不确定我是否在同一页上,但我认为这就是你所要求的。我将AutomaticMigrations设置为false:
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
我有一个像这样的Post类:
public class Post
{
public int Id { get; set; }
public string Title { get; set; }
[Required]
public DateTime DateCreated { get; set; }
public string Content { get; set; }
public string Tags { get; set; }
public ICollection<Comment> Comments { get; set; }
}
它已经生成了,但后来由于某种原因我意识到我需要标题。
public class Post
{
public int Id { get; set; }
[Required]
public string Title { get; set; }
[Required]
public DateTime DateCreated { get; set; }
public string Content { get; set; }
public string Tags { get; set; }
public ICollection<Comment> Comments { get; set; }
}
我进行了更改,快速构建,然后从PM控制台输入:
添加迁移AddPostAnnotation(名称可以是您想要的任何内容)
生成此文件:
public partial class AddPostAnnotations : DbMigration
{
public override void Up()
{
AlterColumn("dbo.Posts", "Title", c => c.String(nullable: false));
}
public override void Down()
{
AlterColumn("dbo.Posts", "Title", c => c.String());
}
}
一旦到达此处,我只需从PM控制台运行Update-Database,即可发送更改。