0

发布的Web应用程序时,我建设有代码优先迁移的ASP.NET MVC应用程序EF与SQL Azure的托管DB它Azure上。我第一次发表这个,它很好。但自那时以来,我的模型发生了变化,Azure数据库中的模式未更新为匹配。当我部署时,我确实已选中“执行代码优先迁移”。当这不起作用时,我删除了我的数据库,然后在Azure门户中重新创建它,认为这会触发它更新。但是,那没有奏效,所以我在迁移配置中设置了AutomaticMigrationsEnabled = True。它仍然没有工作,所以目前我在Azure中的数据库没有任何表。如何才能让Azure中的数据库被迫更新以匹配我的模型,以便发布的网站能够正常工作?我曾尝试寻找是否有办法将VS本地数据库编写为Create查询并在SQL管理工作室中执行该查询,但无法找到如何执行此操作的方法。模式不更新从Visual Studio

+0

您是否尝试在部署后运行应用程序?这就是迁移的开始时间(不是在部署过程中)。请参阅[这里](https://docs.microsoft。COM/EN-US/ASPNET/MVC /概述/工具入门/工具入门与 - 使用-EF-MVC /迁移和部署,与-的实体框架式-AN-ASP-NET- MVC的应用程序)。如果需要,可以用'update-database -Script'生成一个脚本。 –

+0

VS在部署完成后自动启动网站...所以是的,我之后运行了它。起初(在删除数据库之前),它会开始很好,但是在导航到使用新字段的页面时,我会遇到错误。我尝试了“update-database -Script”,但它给了我一个_MigrationHistory的插入查询(这是我看到的在我尝试过的其他所有东西之后在数据库中添加的唯一东西)。 – Andarta

回答

0

如果您确定在发布设置中选择了update database,并且连接字符串是正确的并且它仍然没有更新。也许下面将帮助您:

我有时会收到类似这样的问题,这是很令人沮丧,我发布的文件是正确的,我的设置被设置为允许发布过程中出现SQL更新。但有时候数据库还没有更新,我得到了一个很好的“支持上下文已经改变”的错误,有时候罪魁祸首就是没有更新过的迁移表。不幸的是,让数据库同步的唯一可靠方法是通过比较[dbo].[__MigrationHistory]

来检查它们都在哪个迁移历史记录。如果您发布的服务器缺少最新的迁移历史记录,那么您可以通过比较生成一个SQL脚本输入到包管理器控制台:

Update-Database -Script -TargetMigration [migration name]

“迁移名”应该是最后迁移您发布的服务器有,Visual Studio将生成可以用来将数据库的SQL脚本名称直到目标迁移的最新迁移。

有时(虽然很少,它只发生一次或两次)上述不起作用,无论出于何种原因(通常是因为迁移文件已被删除),如果是这样的话,那么它是一个好主意脚本整个数据库和樱桃选择你需要的SQL。

Update-Database -Script -SourceMigration:0

,这将产生对每个迁移脚本,然后你可以挑樱桃根据您所做的更改。 '最新'的变化将更接近文件的底部。每次的迁徙变化将有如果检查开始:

IF @CurrentMigration < '201710160826338_mymigration' BEGIN

你可以用它来选择您所需,如果你挑选SQL一定要包括更新迁移历史的位。这将是在IF块的末尾,是这个样子:

INSERT [dbo].[__MigrationHistory]([MigrationId], [ContextKey], [Model], [ProductVersion]) VALUES (N'201710101645265_test', N'API.Core.Configuration', 'Some long checksum')

包括迁移历史将确保Visual Studio中不会再有问题。

希望这会有所帮助。