代码之家  ›  专栏  ›  技术社区  ›  Emir

Migratordotnet创建初始迁移

  •  2
  • Emir  · 技术社区  · 14 年前

    migratordotnet 对于现有数据库。我的数据库有大约100个表,我正在尝试生成初始迁移。

    C:\migrations>Migrator.Console.exe SqlServer "Data Source=.\sqlexpress;Initial Catalog=my_database;Integrated Security = True;" MigracijeBaze.dll -dump InitialMigration.cs
    

    不幸的是,生成的迁移的每一列都具有typeof(string)。Int、DateTime、Decimal列转换为string。

    CREATE TABLE [dbo].[Godine](
        [ID] [int] IDENTITY(1,1) NOT NULL,
        [FirmaID] [nvarchar](2) NOT NULL,
        [Godina] [int] NOT NULL,
        [BazaSifri] [nvarchar](50) NOT NULL,
        [BazaPodataka] [nvarchar](50) NOT NULL,
     CONSTRAINT [PK_Godine] PRIMARY KEY CLUSTERED 
    (
        [ID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    

    是生成的迁移

    Database.AddTable("Godine",
        new Column("ID", typeof(String)),
        new Column("FirmaID", typeof(String)),
        new Column("Godina", typeof(String)),
        new Column("BazaSifri", typeof(String)),
        new Column("BazaPodataka", typeof(String)),
    );
    

    我做错什么了吗?进行初始迁移的最佳实践是什么?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Emir    14 年前

    我找到了答案。我下载了源代码并使用了调试器。 似乎转储选项没有完全实现。

    public virtual Column[] GetColumns(string table)
    {
        List<Column> columns = new List<Column>();
        using (
            IDataReader reader =
                ExecuteQuery(
                    String.Format("select COLUMN_NAME, IS_NULLABLE from information_schema.columns where table_name = '{0}'", table)))
        {
            while (reader.Read())
            {
                Column column = new Column(reader.GetString(0), DbType.String);
                string nullableStr = reader.GetString(1);
                bool isNullable = nullableStr == "YES";
                column.ColumnProperty |= isNullable ? ColumnProperty.Null : ColumnProperty.NotNull;
    
                columns.Add(column);
            }
        }
    
        return columns.ToArray();
    }
    

    数据库类型是硬编码的。我将为第一次迁移调用sql脚本。相关问题是 on the issue tracker

    推荐文章