实体代码首次迁移尝试删除旧表

时间:2015-11-04 16:50:31

标签: entity-framework ef-code-first entity-framework-5 ef-migrations

我在我的上下文中添加了一些实体。然后我使用我的工具

将它们迁移到下面
  using (var db = new TourismContext())
                {
                    if (db.Database.CompatibleWithModel(true))
                        return;

                    var initializer = new MigrateDatabaseToLatestVersion<TourismContext, TourismContextConfiguration>();

                    initializer.InitializeDatabase(db);
//and other code.....

它删除了我从我的上下文中删除它们的表。它工作。它是兼容的。但是20分钟后它说不兼容。想要删除一些表但是这些表不存在 我该怎么办?

虽然我从上下文中删除了这些表并将其迁移(迁移工具从数据库中删除该表)为什么要一次又一次地删除它们?迁移想要删除的表在数据库中不存在。因为我迁移它们所以迁移工具删除它们。迁移是否会使表信息丢弃?

这是我的__MigrationHistory

SELECT TOP 1000 [MigrationId]
      ,[Model]
      ,[ProductVersion]
      ,[CreatedOn]
  FROM [TOURISM_new1].[dbo].[__MigrationHistory]

此处没有丢弃表信息

这是我的迁移工具。有两个buton.one show scritp将显示已执行的脚本(脚本按钮),其他是micration buton.it migrate

  private void MigrateButton_Click(object sender, EventArgs e)
        {
            try
            {
                using (var db = new TourismContext())
                {
                    if (db.Database.CompatibleWithModel(true))
                        return;

                    var initializer = new MigrateDatabaseToLatestVersion<TourismContext, TourismContextConfiguration>();

                    initializer.InitializeDatabase(db);

                    foreach (Constants.SecurityFeatureIdentifier securityFeatureIdentifier in Enum.GetValues(typeof(Constants.SecurityFeatureIdentifier)))
                    {
                        if (db.SecurityFeatures.All(sf => sf.SecurityFeatureIdentifierID != (int)securityFeatureIdentifier))
                        {
                            db.SecurityFeatures.Add(new SecurityFeature { SecurityFeatureIdentifier = securityFeatureIdentifier });

                            db.SaveChanges();
                        }
                    }
                }

                statusLabel.Text = "Compatible";
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void ScriptButton_Click(object sender, EventArgs e)
        {
            try
            {
                using (var db = new TourismContext())
                {
                    if (db.Database.CompatibleWithModel(true))
                    return;

                    var migrator = new DbMigrator(new TourismContextConfiguration());

                    var scriptor = new MigratorScriptingDecorator(migrator);

                    scriptControl.Text = scriptor.ScriptUpdate(null, null);

                    foreach (Constants.SecurityFeatureIdentifier securityFeatureIdentifier in Enum.GetValues(typeof(Constants.SecurityFeatureIdentifier)))
                    {
                        if (db.SecurityFeatures.All(sf => sf.SecurityFeatureIdentifierID != (int)securityFeatureIdentifier))
                        {
                            db.SecurityFeatures.Add(new SecurityFeature { SecurityFeatureIdentifier = securityFeatureIdentifier });

                            db.SaveChanges();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        } 

1 个答案:

答案 0 :(得分:0)

您需要使数据库模型与代码优先模型同步。您可以从迁移的Up()方法中注释掉过时的代码并执行更新数据库,也可以删除挂起的迁移,并使用update-database执行Add-Migration MyBaseline -IgnoreChanges。现在你应该兼容,直到你改变你的模型。

https://msdn.microsoft.com/en-us/data/dn579398.aspx?f=255&MSPPError=-2147217396#option1