Entity Framework 7で文字列プロパティのインデックスを作成する方法

entity-framework-core visual-studio-2015

質問

私はEntity Framework 7用のコードの最初のモデルを作成しようとしています。私は最近リリースされたVisual Studio 2015 Betaと、EntityFrameworkパッケージ(project.jsonファイルのスニペット)の次のバージョンを使用しています。

"EntityFramework.SqlServer": "7.0.0-beta1",
"EntityFramework.Commands": "7.0.0-beta1",

現在のところ、データアノテーションは利用できないようですが、私はOnModelCreatingオーバーライドと最近実装された(部分的に)マイグレーションを使用してモデルを作成しています。

今のところ、主キーと一対一の関係は、整数型のインデックスを作成するだけでなく、機能します。例えば:

builder.Entity<Article>(e =>
{
    e.Key(c => c.Id);
    e.OneToOne<Category>(c => c.Category);
    e.Index(c => c.Time).IsUnique(false);
});

このスニペットを使用すると、次の移行コードが生成されます。

migrationBuilder.CreateTable("Article",
            c => new
                {
                    Id = c.String(),
// ...
                    CategoryIdKey = c.Int(nullable: false),
                    Time = c.DateTime(nullable: false),
// ...
               })
            .PrimaryKey("PK_Article", t => t.Id)
            .UniqueConstraint("UC_Article_CategoryIdKey", t => t.CategoryIdKey);

        migrationBuilder.AddForeignKey("Category", "FK_Category_Article_CategoryId", new[] { "CategoryId" }, "Article", new[] { "CategoryIdKey" }, cascadeDelete: false);

        migrationBuilder.CreateIndex("Article", "IX_Article_Time", new[] { "Time" }, isUnique: false, isClustered: false);

しかし、文字列プロパティにインデックスを追加しようとすると、移行が生成されますが、適用されたSQL Serverでは、明らかにnvarchar(MAX)の列型が原因で拒否されます。 .Required().MaxLength(100)ように見え.Required().MaxLength(100)は、文字列型の生成を制限しません。そして、列の型を変更する方法はありますが、ModelBuilderで呼び出す方法は見つけられません。

        builder.Entity<Keyword>(e =>
        {
            e.Key(c => c.Id);
            e.Property(c => c.Word).Required().MaxLength(100);
            e.Index(c => c.Word).IsUnique(true);
        });

結果の移行:

        migrationBuilder.CreateTable("Keyword",
            c => new
                {
                    Id = c.Int(nullable: false, identity: true),
                    Word = c.String(nullable: false, maxLength: 100)
                })
            .PrimaryKey("PK_Keyword", t => t.Id);

        migrationBuilder.CreateIndex("Keyword", "IX_Keyword_Word", new[] { "Word" }, isUnique: true, isClustered: false);

EF7のベータ版で文字列プロパティのインデックスを作成する方法はありますか?

受け入れられた回答

残念ながら、この時点(7.0.0-beta1)では、使用する列の種類を決定する際に、最大長と列の種類のメタデータは使用されません。今のところ、移行では未処理のDDLにドロップダウンする必要があります。

// Add before CreateIndex
migrationBuilder.Sql("ALTER TABLE [Keyword] ALTER COLUMN [Word] nvarchar(4000)");


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ