Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SQL Azure上启动应用程序上运行实体代码首次迁移_Sql Server_Entity Framework_Azure_Azure Sql Database_Entity Framework Migrations - Fatal编程技术网

Sql server 在SQL Azure上启动应用程序上运行实体代码首次迁移

Sql server 在SQL Azure上启动应用程序上运行实体代码首次迁移,sql-server,entity-framework,azure,azure-sql-database,entity-framework-migrations,Sql Server,Entity Framework,Azure,Azure Sql Database,Entity Framework Migrations,我最近开始尝试移动一个由实体框架代码优先迁移(EF5)支持的大型生产数据库。我使用的是代码优先迁移,自动迁移已关闭 数据层在应用程序\u Start()内部进行升级,使用的内容如下: Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, Migrations.Configuration>(null)); using (var ctx = new MyDbContext()){ ctx.D

我最近开始尝试移动一个由实体框架代码优先迁移(EF5)支持的大型生产数据库。我使用的是代码优先迁移,自动迁移已关闭

数据层在
应用程序\u Start()
内部进行升级,使用的内容如下:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, Migrations.Configuration>(null));
using (var ctx = new MyDbContext()){
    ctx.Database.Initialize(false);
}
我开始发疯了

我尝试过的事情:

  • 使用
  • 在本地数据库备份和Azure数据库备份之间进行模式比较(表结构没有变化,尽管我假设索引已经改变)
  • 升级到EF 6,以防在旧模型中进行的模型元数据比较存在差异
  • 应用程序\u start()
    上执行迁移有几种不同的方法
我认为这可能是一个bug,因为我的应用程序在迁移之前已经使用同一个代码库工作了两年多,而这个问题的例外似乎很奇怪

我认为可能发生的事情:

  • SQLAzure迁移工具改变了我的模型中的一些小事情(向所有内容添加聚集索引)
  • EF DBMigrator的模式比较部分将这些更改视为模式中的差异,但它不是抛出一个
    DbEntityValidationException
    ,而是抛出一个
    AutomaticMigrationsDisableException
    ,在异常数据中没有列出任何模型差异

有人有什么想法吗?有没有办法捕获新模型并手动更新
\u migrationhistory
表,使世界再次成为一个快乐的地方?

自动迁移禁用异常在这里肯定是误导性的

我相信这篇文章可能会帮助你解决这个问题

建议在服务器上运行fuslogvw(),以找出您的网站难以找到的程序集


这可能只是让您的nuget软件包同步的问题。

造成这种情况的实际原因是我的数据层中缺少依赖项

我的实体框架域POCO在某些属性上具有Json.Net属性

由于属性是使用反射运行的,并且以静默方式失败,因此引发的异常与最终结果无关

正如Alex在回复中提到的那样,我在博客中讲述了解决这个问题的过程:

正如他在评论中所说,解决这一问题的方法应该是打开Fusion日志。不幸的是,当时常量
自动迁移DisabledException
一直让我在一个完全不同的地方搜索


这个故事的寓意可能是:在搜索问题时遇到死角时,添加fusion日志作为贯穿步骤。

您是否尝试过“添加迁移-m”foo“要查看差异吗?我查看了。如果您阅读了我的回复,您可以看到powershell在DB和模型之间没有任何差异。我在EntityFramework 6.0.1中遇到问题…我回滚到了“6.0.0-rc1”使用以下命令:Install Package EntityFramework-Version 6.0.0-rc1-Pre,它会再次工作。这听起来可能很奇怪,但我也会尝试一下。首先,以这种方式更新生产数据库有点危险,我不推荐这样做。除此之外,可能是u MigrationHistory表没有正确部署到Azure数据库,因此检查架构和内容是否与本地相同。如果不是这样,我建议使用EdmxWriter类获取本地运行的模型和针对SQL Azure运行的模型。如果它们不同,则应提供线索。您是否建议人们不应先将代码迁移到Azure SQL?或者人们应该修改_MigrationHistory表。我已经做了sql数据比较和sql架构比较。两者在visual studio中都是相同的(还没有尝试sql比较)。嗨,Alex-感谢链接。有趣的是,这实际上是我关于查找解决方案的博文:-)问:你在Azure中解决了这个问题吗?如果是的话,它是一个网络角色吗?如果是这样,您是能够在服务器上找到fuslogvw.exe,还是自己安装的?
PM> update-database -verbose -script
Using StartUp project 'MyProject.Website'.
Using NuGet project 'MyProject.Data'.
Target database is: 'MyNewSQLAzureDB' (DataSource: tcp:xxxxxx.database.windows.net,1433, Provider: System.Data.SqlClient, Origin: Configuration).
No pending explicit migrations.