我创建了一个 Visual Studio 2012 MVC4 应用程序。我正在通过右键单击项目并选择发布来测试“发布”功能。我按照这里的说明进行操作。我可以连接到远程 Web 服务器,并且由于某种原因,文件夹被发布到正确的文件夹,但内容文件夹除外。
当我运行浏览到远程 Web 服务器时,它会提示我登录,因此应用程序正在运行。然而,迁移从未发生过。创建的唯一表是 simplemembership 表,所以我知道 Web 服务器正在连接到远程数据库服务器。没有创建其他表,也没有运行种子方法。我播种角色和默认用户。
我选中了发布设置中“执行代码优先迁移(在应用程序启动时运行)”的框
在我的 localdb 连接字符串上一切正常以进行本地测试。当我发布到实时站点时,只是无法弄清楚如何从现有迁移和种子中创建数据库,请注意我只会播种一次。有没有办法指定再次运行哪些迁移?我可以复制迁移并在数据库服务器上运行,但为什么需要额外的步骤?
编辑:将 database.setinilizer 添加到我的上下文时,我现在收到一个错误,说我的 userprofile 表中的某些字段不存在,我使用简单的成员资格。此错误发生在 Web 发布后的第一个页面加载时,然后在继续页面加载时出现错误“WebSecurity.InitializeDatabaseConnection”方法只能调用一次。
但是,它现在确实创建了我的 simplemembership 表,但我对所有其他表的迁移从未运行,这就是为什么我缺少额外的用户配置文件字段。
编辑: 基本上我没有在调用 WebSecurity.InitializeDatabaseConnection 之前检查网络安全是否已初始化,以便解决该问题。现在我让它部分工作。该应用程序可以很好地创建 simplemembership 表,但是由于我将表添加到 UserProfile 表中,因此在更改它们之前我无法播种。因此,我手动创建了 userprofile 表并让应用程序创建其余的表。然后我在初始迁移中注释掉 userprofile 表。在此之后,当我登录时,它将创建我的其余表格。
开放的问题是如何让我的数据库迁移在 simplemembership 初始化之前运行?