为什么用无效的sql调用DbMigration.Sql会抛出错误?

时间:2017-03-10 23:10:09

标签: ef-migrations

我有以下初始迁移脚本。

#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;
        }
    }
}

0 个答案:

没有答案