0

プロジェクトでは、エンティティフレームワークコードファーストアプローチを使用しています。パッケージマネージャーコンソールのenable-migrationsステートメントを使用して、モデルを作成し、移行を有効にしました。私のコンテキストクラスには、次のようなマッピング構成と関係が含まれています

modelBuilder.Configurations.Add(new PostMap());
modelBuilder.Configurations.Add(new UserMap());

移行ファイル201302261054023_InitialCreate.csのUpメソッドには、DbSet<Type>プロパティで指定されたコンテキストとしてすべてのテーブル定義が含まれています。

データベースの初期化中に特定の移行まで移行したいので、カスタムデータベースInitializerのInitializeDatabaseメソッドを変更しました。

public void InitializeDatabase(T context)
{
    bool databaseExists = context.Database.Exists();
    if (!databaseExists)
        context.Database.CreateIfNotExists();

    var configuration = new Configuration();
    var migrator = new DbMigrator(configuration);
    migrator.Update("InitialCreate");
}

201302261054023_InitialCreateクラスのUpメソッドを変更して、から別のインデックスを追加することは可能です。

CreateTable(
        "dbo.City",
        c => new
            {
                Id = c.Int(nullable: false, identity: true),
                Name = c.String(maxLength: 450),
            })
        .PrimaryKey(t => t.Id);

CreateTable(
        "dbo.City",
         c => new
            {
                Id = c.Int(nullable: false, identity: true),
                Name = c.String(maxLength: 450),
            })
        .PrimaryKey(t => t.Id)
        .Index(t=>t.Name,true);

別の移行を追加せずに?

4

2 に答える 2

5

移行に関連する多くの Web ページをマイニングした後、データベースを「ゼロ移行」(空のデータベース) に更新する場合にのみ、初期移行の変更が役立つことがわかりました。ゼロデータベースへの移行がなければ、別の移行を追加して、次のような新しい移行でインデックスを作成できます

public partial class InitialIndexes : DbMigration
{
    public override void Up()
    {
        CreateIndex("City", "Name", true);
    }

    public override void Down()
    {
        DropIndex("City", new[] {"Name"});
    }
}
于 2013-03-05T10:07:48.567 に答える
0

インデックスを作成するには、ExecuteSqlCommandを使用できます。

context.Database.ExecuteSqlCommand("CREATE INDEX IX_TableName_ColumnName ON TableName (ColumnName)");

私は通常、次のようなシードオーバーライドメソッドでこのコマンドを使用しています。

            protected override void Seed(YourContext context)
            {
                context.Database.ExecuteSqlCommand("CREATE INDEX IX_TableName_ColumnName ON TableName (ColumnName)");
                //...Rest of seed code
             }

メソッドで同じ呼び出しを使用できるはずです。

于 2013-02-28T14:49:55.463 に答える