我正在开发Code First Migration,我正在尝试使用基于代码的迁移(Automatedmigration = false)。我现在可以做的是:
- 运行启用迁移
- 添加迁移初始
- 使用“更新数据库”运行迁移(创建迁移历史表)
- 对我的模型进行更改
-Execute添加迁移“changesInMyModel”
现在我要做的是能够自动运行我的所有迁移。 使用类似的东西:
[Test]
public void UpdateDataModel()
{
Database.SetInitializer(
new MigrateDatabaseToLatestVersion<MyContext, MyConfiguration>());
var dc = new MyContext();
dc.Database.Initialize(true);
}
执行测试并转到数据库后,我看不到任何更改。 我能做什么?欢迎提出建议!
更新: Myconfiguration类使用Automatedmigration = false。
MyConfiguration类是公共的,在其父项目之外可见。
我没有在app.config中使用任何配置,因为我使用的是源代码中的Database.SetInitializer。
在运行我的测试之前,创建了MigrationHistory
从包管理器控制台运行更新数据库,迁移运行正常。
更新: 我正在运行以下示例的修改版本(使用基于代码的迁移): http://msdn.microsoft.com/en-us/data/jj591621.aspx,但问题仍然存在。 - 启用迁移 - 添加迁移 - 尝试SetInitializer和Initialize但没有任何反应。
更新: - 当Automatedmigration = true时,SetInitializer和Initialize正常工作,模型中的更改与db同步。 - 使用下面的代码工作。
new DbMigrator(new Configuration()).Update(); What should be the difference?
答案 0 :(得分:1)
只是根据我们在帖子中的评论进行更新......
这解决了问题 - 但坦率地说我仍然不确定为什么会这样做 :)
尝试使用
EnableAutomaticMigrations
打开/关闭以进行检查。试试看 try-catch确保没有错误。并尝试直接运行DbMigratornew DbMigrator(new Configuration()).Update()
-
......以及其他评论
迁移应该工作w或o那个标志。并且DbMigrator完全正确 初始化程序的作用。似乎没有区别 - 这是 源代码(不同于EF版本 - 但我认为它是相同的) - MigrateDatabaseToLatestVersion
答案 1 :(得分:0)
我猜您应该尝试将protected void Application_Start()
下的代码放在Global.asax.cs
下。这样,数据库连接将始终在其他所有内容之前初始化。
if (!WebSecurity.Initialized)
WebSecurity.InitializeDatabaseConnection("DefaultConnection",
"UserProfile", "UserId", "UserName", autoCreateTables: true);
也许这个Pro Asp.Net Mvc 4会帮助您设置测试项目。还有一个MVC 3 version,但他们几乎会说同样的话。他们建议使用Moq Library,过去它帮助了我。