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

Entity framework 实体代码首次迁移尝试删除旧表,entity-framework,ef-code-first,entity-framework-5,entity-framework-migrations,Entity Framework,Ef Code First,Entity Framework 5,Entity Framework Migrations,我在我的上下文中添加了一些实体,然后用我的工具将它们作为一个组件进行迁移 using (var db = new TourismContext()) { if (db.Database.CompatibleWithModel(true)) return; var initializer = new MigrateDatabaseTo

我在我的上下文中添加了一些实体,然后用我的工具将它们作为一个组件进行迁移

  using (var db = new TourismContext())
                {
                    if (db.Database.CompatibleWithModel(true))
                        return;

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

                    initializer.InitializeDatabase(db);
//and other code.....
这里没有拖放表信息

这是我的迁移工具。有两个buton。一个ShowScritp将显示已执行的脚本(脚本按钮),另一个是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());
            }
        } 
private void MigrateButton_单击(对象发送方,事件参数e)
{
尝试
{
使用(var db=new TourismContext())
{
if(db.Database.CompatibleWithModel(true))
返回;
var initializer=new MigrateDatabaseToLatestVersion();
初始值设定项。初始值设定表(db);
foreach(Enum.GetValues中的Constants.SecurityFeatureIdentifier SecurityFeatureIdentifier(typeof(Constants.SecurityFeatureIdentifier)))
{
if(db.SecurityFeatures.All(sf=>sf.SecurityFeatureIdentifierID!=(int)securityFeatureIdentifier))
{
添加(新的SecurityFeature{SecurityFeatureIdentifier=SecurityFeatureIdentifier});
db.SaveChanges();
}
}
}
statusLabel.Text=“兼容”;
}
捕获(例外情况除外)
{
Show(例如ToString());
}
}
私有无效脚本按钮\u单击(对象发送方,事件参数e)
{
尝试
{
使用(var db=new TourismContext())
{
if(db.Database.CompatibleWithModel(true))
返回;
var migrator=new DbMigrator(new TourismContextConfiguration());
var scriptor=new MigratorScriptingDecorator(migrator);
scriptControl.Text=scriptor.ScriptUpdate(null,null);
foreach(Enum.GetValues中的Constants.SecurityFeatureIdentifier SecurityFeatureIdentifier(typeof(Constants.SecurityFeatureIdentifier)))
{
if(db.SecurityFeatures.All(sf=>sf.SecurityFeatureIdentifierID!=(int)securityFeatureIdentifier))
{
添加(新的SecurityFeature{SecurityFeatureIdentifier=SecurityFeatureIdentifier});
db.SaveChanges();
}
}
}
}
捕获(例外情况除外)
{
Show(例如ToString());
}
} 

您需要使数据库模型与代码优先模型同步。您可以从迁移的Up()方法中注释掉过时的代码并更新数据库,也可以删除挂起的迁移并使用更新数据库添加迁移MyBaseline–IgnoreChanges。现在,在更改模型之前,您应该是兼容的


如何同步?我没有Up()方法。我应该将Up()添加到上下文吗?Up()方法是由迁移自动创建的。您提到您的迁移试图删除不存在的表,您在哪里看到这一点?我添加了迁移工具buton。在该工具中,buton在执行脚本之前显示脚本。我更新了我的问题。您将看到脚本生成buton var scriptor=新的MigratorScriptingDecorator(migrator);scriptControl.Text=scriptor.ScriptUpdate(null,null);
  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());
            }
        }