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



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.