2

既存のデータベースに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 列は文字列に変換されます。たとえば、テーブル Godine の場合

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)),
);

私は何か間違ったことをしていますか?初期移行を行うためのベスト プラクティスは何ですか?

4

1 に答える 1

2

私は答えを見つけました。ソースコードをダウンロードしてデバッガーを使用しました。ダンプオプションが完全に実装されていないようです。

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スクリプトを呼び出すだけです。関連する問題は、問題追跡システムにあります

于 2010-11-05T12:36:12.433 に答える