azure - SQL Azure 意外数据库删除/重新创建

标签 azure ef-code-first azure-sql-database entity-framework-migrations

我已经为此绞尽脑汁好几个小时了,但似乎无法弄清楚出了什么问题。


这是我们的项目基本设置:

  • 具有 ASP.NET 成员(member)资格的 MVC 3.0 项目
  • Entity Framework 4.3,代码优先方法
  • 本地环境:带有 2 个 MDF 数据库文件的本地 SQL Server(aspnet.mdf +Entity.mdf)
  • 服务器环境:Windows Azure + 2 个 SQL Azure 数据库(aspnet 和实体)


这就是我们所做的:

  • 创建了本地和远程数据库,修改了 web.config 以在 Debug模式下使用 SQLEXPRESS 连接字符串,在 Release模式下使用 SQL Azure 连接字符串
  • 创建了 SampleData类扩展DropCreateDatabaseAlways<Entities>Seed播种数据的方法。
  • 二手System.Data.Entity.Database.SetInitializer(new Models.SampleData());Application_Start将数据播种到我们的数据库中。
  • 在本地运行应用 - 创建表并设定种子,一切正常。
  • 已部署、运行远程应用 - 创建表并设定种子,一切正常。
  • 添加了预处理器指令,以在远程 Azure 环境上启动每个应用程序时停止破坏实体数据库:

    #if DEBUG
        System.Data.Entity.Database.SetInitializer(new Models.SampleData());
    #else
        System.Data.Entity.Database.SetInitializer<Entities>(null);
    #endif
    


这就是它变得丑陋的地方

  • 我们使用 NuGet 启用了迁移,AutomaticMigrationsEnabled = true;
  • 一切都运行顺利且良好。我们把它煮了几天
  • 今天,我们注意到 Azure 环境中存在一个未知错误:

    • 我们有几个派生自父类(super class) SuperClass 的类
    • 相应的实体表将所有这些对象存储在同一个 SuperClass 中表,使用鉴别器来了解加载各个类时从哪一列提供数据
    • 虽然今天之前加载一切顺利,但现在就不行了。我们收到以下错误消息:

      The 'Foo' property on 'SubClass1' could not be set to a 'null' value. You must set this property to a non-null value of type 'Int32'.
      
    • 快速检查后,我们的 SuperClass表有列 FooFoo1 。逻辑足够了,因为 SuperClass有 2 个子类 SubClass1SubClass2 ,每个都有 Foo属性(property)。在我们的例子中,Foo为 NULL 但 Foo1有一个 int32值(value)。所以问题不在于数据库 - 相反,我们的模型和数据库之间的链接似乎已经丢失。鉴别器逻辑已损坏。
  • 在尝试寻找可能出现问题的迹象时,我们注意到了几件事:

    • 尽管我们从未在 SQL Azure 实体数据库上执行过任何迁移,但该数据库现在具有 _MigrationHistory
    • _MigrationHistory表有一条记录:

      MigrationID: 201204102350574_InitialCreate
      CreatedOn: 4/10/2012 11:50:57 PM
      Model: <Binary data>
      ProductVersion: 4.3.1
      
    • 查看其他表,在这次迁移发生时,大多数表都被清空了。仅最初播种为 SampleData 的表保持不变。

    • 通过 SQL Azure 管理门户查看,我们的实体数据库显示以下创建日期:2012 年 4 月 10 日 23:50:55。


这是我们的理解

  • 由于某种原因,SQL Azure 删除并重新创建了我们的数据库
  • 在此过程中创建了 _MigrationHistory 表,注册了一个起点来测试模型以用于将来的迁移


这是我们的问题

  • 谁/什么触发了数据库删除/重新创建?
  • EF 如何重新播种 Application_Start 以来的样本数据有System.Data.Entity.Database.SetInitializer<Entities>(null);
<小时/>

编辑:看看可能出了什么问题,我们注意到在此 SQL Azure 中我们没有尊重的一件事 tutorial :我们没有删除 PersistSecurityInfo创建数据库后,从我们的 SQL Azure 实体数据库连接字符串中获取。不明白为什么它会导致这个问题,但仍然值得一提......

最佳答案

没关系,找到了问题的原因。如果有人想知道的话:自从添加预处理器指令以来,我们还没有进行任何 Azure 部署。 MS 必须重新启动我们的虚拟机所在的计算机,并且新虚拟机使用查看数据重新创建了数据库。

经验教训:始终进行频繁的 Azure 部署。

关于azure - SQL Azure 意外数据库删除/重新创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10108659/

相关文章:

asp.net-mvc - 将查找/引用表移动到新模式

c# - 如何使用 Entity Framework 6 Code First 设置默认值约束?

c# - 使用 GraphDiff 更新多对多关系会导致错误

azure-sql-database - SQL Azure。变更追踪

azure - 将文件作为参数上传到 Azure DevOps 中的作业

azure - 在发布 ASP.NET Core Web 应用程序之前应在 Azure 上配置哪些内容?

azure - Power BI Desktop 无法使用 Azure 成本管理连接器导入数据

azure - 无法删除 Azure VM

用户 'NT AUTHORITY/ANONYMOUS LOGIN' Azure SQL 服务器登录失败

Azure 部署槽 - 向槽添加权限