【发布时间】:2015-10-27 06:35:57
【问题描述】:
我能找到的最接近的是这个问题: EF code migration in reference dll coming through nuget
与那篇文章类似,我们有一个使用 EF 6 编写一些交叉引用记录的包。我最近修改了修改 EF 使用的表的架构的包。添加迁移等,并重新部署包。到目前为止一切顺利。
我在两种不同的解决方案中引用了这个 Nuget 包。在一个解决方案中,该包尚不存在,因此我将它添加、构建、部署(均使用 Team City)到 Azure。对于该解决方案,没有预先存在的迁移,因此没有 __MigrationHistory 表。一旦代码访问外部参照服务,它就会愉快地创建表和 __MigrationHistory。表和历史都有正确的列和完整的迁移历史......到目前为止,一切都很好。
在第二个解决方案中,包已经存在,所以我只是更新了它。我期望发生的是,当此代码调用外部参照服务时,它还将运行迁移、更新列名并插入 __MigrationHistory 记录。但是,唉,我在日志中得到的只是“支持 'DatabaseDef' 上下文的模型在创建数据库后发生了变化......”
在这两种解决方案中,我们都没有使用任何 SetInitializer(代码或配置)。两种解决方案都在相同的地方引用了 EF。唯一的区别是,对于“有效的”,当它遇到外部参照服务代码时,我实际上是通过调试器运行的。我还没有尝试过通过调试器运行的其他解决方案,也想不出为什么这很重要,但是发生了奇怪的事情。我还向我们的 Ops 团队提出了一个请求,以查看 Team City 部署是否在某些情况下在部署期间启用代码优先迁移。
问题:
- 任何想法为什么一个可以工作而不是另一个?
- 在“Xref Nuget 包”中,我应该在哪里放置初始化程序(如果有的话)?那里没有 App_Start 或 global.asax……只是一个程序集在写外部参照记录。
- 还有什么我忽略的吗?
【问题讨论】:
-
更新 - 通过将
<databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion...添加到我的 web.config 我能够迁移解决方案 2。我对这个解决方案并不完全满意,所以我仍在寻找问题。
标签: c# entity-framework asp.net-mvc-4