Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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 Azure意外删除/重新创建数据库_Azure_Ef Code First_Azure Sql Database_Entity Framework Migrations - Fatal编程技术网

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

SQL Azure意外删除/重新创建数据库,azure,ef-code-first,azure-sql-database,entity-framework-migrations,Azure,Ef Code First,Azure Sql Database,Entity Framework Migrations,几个小时以来,我一直在为这件事挠头,但似乎不知道出了什么问题 这是我们的项目基本设置: 具有ASP.NET成员资格的MVC 3.0项目 实体框架4.3,代码优先方法 本地环境:附加了2个MDF数据库文件的本地SQL Server(aspnet.MDF+entities.MDF) 服务器环境:Windows Azure+2 SQL Azure数据库(aspnet和实体) 以下是我们所做的: 创建本地和远程数据库,修改web.config以在调试模式下使用SQLEXPRESS连接字符串,在

几个小时以来,我一直在为这件事挠头,但似乎不知道出了什么问题


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

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

以下是我们所做的:

  • 创建本地和远程数据库,修改web.config以在调试模式下使用SQLEXPRESS连接字符串,在发布模式下使用SQL Azure连接字符串
  • 创建了一个
    SampleData
    类扩展
    DropCreateDatabaseAlways
    ,使用
    Seed
    方法对数据进行种子设定
  • 使用了
    System.Data.Entity.Database.SetInitializer(new Models.SampleData())
    应用程序中启动
    将数据种子植入我们的数据库
  • 本地运行应用程序-已创建表并为其设定种子,一切正常
  • 已部署并运行远程应用程序-已创建并播种了表,一切正常
  • 添加了预处理器指令,以停止在远程Azure环境中的每个应用程序启动时销毁实体数据库:

    #if DEBUG
        System.Data.Entity.Database.SetInitializer(new Models.SampleData());
    #else
        System.Data.Entity.Database.SetInitializer<Entities>(null);
    #endif
    
  • 快速检查后,我们的
    超类
    表中有
    Foo
    Foo1
    列。因为
    超类
    有两个子类
    子类1
    子类2
    ,每个子类都有一个
    Foo
    属性,所以逻辑性很强。在我们的例子中,
    Foo
    为NULL,但是
    Foo1
    有一个
    int32
    值。所以问题不在于数据库,而在于我们的模型和数据库之间的联系似乎已经丢失了。鉴别器逻辑已损坏
  • 在试图找出可能出错的迹象时,我们注意到以下几点:

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

      MigrationID: 201204102350574_InitialCreate
      CreatedOn: 4/10/2012 11:50:57 PM
      Model: <Binary data>
      ProductVersion: 4.3.1
      
      MigrationID:201204102350574\u InitialCreate
      CreatedOn:4/10/2012 11:50:57下午
      型号:
      产品版本:4.3.1
      
    • 看看其他表,当迁移发生时,大多数表都是空的。只有最初使用
      SampleData
      作为种子的表保持不变

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

  • 这是我们的理解

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

    以下是我们的问题

    • 谁/什么触发了数据库删除/重新创建
    • 既然
      Application\u Start
      has
      System.data.Entity.Database.SetInitializer(null),EF如何重新播种我们的样本数据


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

    不管怎样,我们找到了问题的原因。如果有人想知道:自从添加预处理器指令以来,我们还没有进行任何Azure部署。MS必须已重新启动我们的VM所在的机器,并且新VM使用see data重新创建了数据库


    经验教训:总是频繁部署Azure。

    不管怎样,找到问题的原因。如果有人想知道:自从添加预处理器指令以来,我们还没有进行任何Azure部署。MS必须已重新启动我们的VM所在的机器,并且新VM使用see data重新创建了数据库


    经验教训:经常进行Azure部署。

    我也有类似的经验,当我登录sql管理门户时,我的数据库消失了。我仍然不知道那是怎么发生的。在我的应用程序发布后,我必须小心……我也有过类似的经历,当我登录sql管理门户时,我的数据库消失了。我仍然不知道那是怎么发生的。在我的应用程序发布后,我必须小心。。。
    MigrationID: 201204102350574_InitialCreate
    CreatedOn: 4/10/2012 11:50:57 PM
    Model: <Binary data>
    ProductVersion: 4.3.1