在启动项目中发布不带上下文的Entity-Framework Code-First迁移

9

我正在构建一个解决方案,其中包括以下项目:

  • Main.Data - 类库项目
  • Main.API - Asp.NET MVC WebApi - 引用 Main.Data
  • Main - Asp.NET MVC 4 web 应用程序 - 引用 Main.API

我在 Main.Data 项目中有一个 MyContext : DbContext 类。 我已经成功地在 Main.Data 项目上使用了 enable-migrations 控制台命令,并且我成功地使用 LocalDB 作为我的数据的 SQL 服务器和 upgrade-database 迁移的 SQL 服务器。

当我尝试发布 Main 项目到 Windows Azure 网站时,问题就开始了。

自动创建的发布配置文件使用 Import from a Windows Azure web site,似乎没有识别出我正在使用 Entity Framework Code First 解决方案,因此我无法像我想要的那样启用 Execute Code First Migrations
相反,我只能启用 Update database 脚本。

我正在使用带有 Entity Framework 5.0.0 的 Visual Studio 2012(从项目开始)。

仅作确认,我尝试在Main项目中添加一个临时的MyContext类,并在Main项目上启用迁移,之后我的发布配置文件自动检测到了Entity Framework Code-First。
当然,这不是一个解决方案(或者说它是吗?)
以下是一些相关的讨论帖子:
  • 这个是基础学习教程。
  • 这个解释了部署选项,但没有解决问题。
  • 这个提供了一些尝试的想法,但似乎都不自然。
我正在寻找一个干净稳定的解决方案。我必须把我的Context类放在Main项目里吗?
提前感谢您的回答。

你记得将 app/web.config 添加到主项目中吗?当你启用迁移时,它会将配置文件添加到 Main.Data 项目中。但是,如果你只是引用该项目,则不会添加这些文件。我将我的上下文放在单独的项目中,但配置文件应该在我使用它们的项目中,对吧? - Poul K. Sørensen
是的,web.config位于主项目上,配置文件位于Main.Data上...你成功将主项目部署到Azure了吗? - Liel
我的设置并不完全相同。我会在 Visual Studio 和本地环境中执行所有迁移操作。当我进行部署时,我的数据库会被更新,一切都能正常工作。但我还没有尝试过使用自动迁移。 - Poul K. Sørensen
1个回答

10

我现在可以在创建发布配置文件时启用“执行代码优先迁移”功能。
以下是我完成此操作的步骤:

  1. Main / Web.config中,我将连接字符串的名称更改为上下文类的FQN:Main.Data.MyContext
  2. Main项目引用添加到Main.Data项目中(直到现在不需要)。

这对我来说做到了。
如果有更好或更具教育意义的答案,我会非常乐意听取。


1
Main.Data.MyContext是完全限定名称(Fully Qualified Name),它与“完整路径”(类似于文件系统路径的东西)不同。 - Carl G
为了使用我现有的发布配置文件(.pubxml),我不得不进入它们并手动更新“<ObjectGroup name =“ ...”>”。重新创建也可能有效。谢谢! - Carl G
这对我没用 :(. @Liel 你还做了什么让它工作吗? - Zero3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接