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());
}
}