我正在开发每个版本(更新视图,添加/删除列)之间的数据库架构可能不同的窗口应用程序。因此,我正在寻找让应用程序在客户端计算机上启动时EF更新架构的方式。我读了一些文章,但他们指向包管理器命令Add-Migration, Update-Database
,我不能在我的情况下使用。 我使用了存储库模式,所以当我尝试Database.SetInitializer<C>(new MigrateDatabaseToLatestVersion<C, Configuration<C>>());
我得到无法更新数据库以匹配当前模型,因为有挂起的更改,并且自动迁移被禁用。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移。异常 但是,当我设置AutomaticMigrationsEnabled = true;
我得到了另一个错误:表''表名'已经存在。使用实体框架代码首先迁移来更新应用程序启动时的数据库架构
0
A
回答
0
我找到了一个解决办法是创建一个扩展方法
public static void RunMigration(this DbContext context, DbMigration migration)
{
var prop = migration.GetType().GetProperty("Operations", BindingFlags.NonPublic | BindingFlags.Instance);
if (prop != null)
{
IEnumerable<MigrationOperation> operations = prop.GetValue(migration) as IEnumerable<MigrationOperation>;
var generator = new SqlServerMigrationSqlGenerator();
var statements = generator.Generate(operations, "2008");
foreach (MigrationStatement item in statements)
context.Database.ExecuteSqlCommand(item.Sql);
}
}
然后创建类MyMigration
它继承DbMigration像正常迁移,而当应用程序启动,我会检查,并迫使它象下面这样运行:
var myMigration = new MyMigration();
myMigration.Up();
this.RunMigration(myMigration);
相关问题
- 1. 实体框架代码首先迁移和数据迁移
- 2. 用实体框架更新数据库模式代码首先
- 3. 如何更新实体框架7迁移和数据库 - 代码优先
- 4. 实体框架中的不同dll代码首先迁移
- 5. 实体框架代码首先使用Where子句更新
- 6. 实体框架代码首先迁移 - 删除列
- 7. 实体框架代码首先:触发特定迁移
- 8. 实体框架4.3更新数据库时的迁移异常
- 9. 实体框架代码优先自动迁移到Azure数据库
- 10. 实体框架代码首先生成数据库不正确
- 11. 实体框架代码首先定义数据库名称
- 12. 实体框架代码首先恢复数据库为空
- 13. 实体框架代码首先,不生成数据库
- 14. 实体框架4.3多应用程序使用的数据库迁移策略
- 15. 我在实体框架代码首先
- 16. 实体框架代码首先愁楚
- 17. 实体框架代码首先FK场
- 18. 实体框架代码首先+ MySQL ... NullReferenceException
- 19. 部署实体框架代码首先
- 20. 变化实体框架代码首先
- 21. 移动一个实体框架应用程序和数据库
- 22. 实体框架代码优先自动模式迁移
- 23. 实体框架代码优先 - 使用MySql创建数据库?
- 24. 删除级联更新到实体框架代码首先
- 25. 如何使用代码优先迁移来更新数据库?
- 26. 实体框架启用迁移-EnableAutomaticMigrations?
- 27. 实体框架代码首先配置每个实体的架构
- 28. 实体框架:无法更改代码优先迁移的数据源
- 29. 首先在实体框架数据库中使用Enum?
- 30. 实体框架数据库首先只使用某些列
请参阅[这里](http://stackoverflow.com/questions/35144784/how-to-use-migration-programmatically-in-entityframework-codefirst)和[这里](https://romiller.com/2012/02/09/running-scripting-migrations-from-code /) –
我已阅读并尝试以上但未成功,我更新了我的问题以获取更多详细信息@SteveGreene –
听起来像您没有正确配置迁移。您需要进行初始基线迁移“添加迁移MyBaseline -IgnoreChanges”。然后,为随后的更改正常添加迁移。 –