我有以下初始迁移脚本。
#region up中的代码是由Entity Framework创建的。
但是,如果_MigrationHistory表已存在,我不希望初始迁移运行。
我很惊讶地发现,如果表不存在,DbMigration.Sql会吞下应该发生的错误。
public partial class startup : DbMigration
{
public override void Up()
{
try
{
Sql("select top 1 MigrationId from __MigrationHistory");
return;
}
catch
{
//
}
#region up // should run if the sql() call fails
CreateTable(
"dbo.ConfigurationNumbers",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name = c.String(nullable: false, maxLength: 60),
Value = c.String(nullable: false),
Prefix = c.String(nullable: false, maxLength: 20),
})
.PrimaryKey(t => t.Id);
// etc
#endregion
}
鉴于该表不存在,为什么不调用sql()会引发错误?
我已经按照以下方式使Up()方法正常工作了 public override void Up() { if(HandyDatabase.TableExists(“ConfigurationNumbers”))
{
return;
}
#region up
etc
带
public static class HandyDatabase
{
public static bool TableExists(string tableName )
{
using (var connect = new JobTalkDbContext())
{
var results = connect.Database.SqlQuery<string>(@"SELECT table_name FROM INFORMATION_SCHEMA.TABLES where table_name = @param1", new SqlParameter("param1", tableName)).ToArray();
var result = results.FirstOrDefault();
return result != null;
}
}
}