4

그림자 속성을 사용하여 다중 열 고유 인덱스를 만들려고합니다. 나는 재산을 추가하는 것만으로이 문제를 해결할 수 있다는 것을 알고 있지만, 이것이 가능하다면 내 모델을 깨끗하게 유지하지 않고보고 싶습니다. EF는 그림자 속성을 사용하여 Mutli-column Index를 만들 수 있습니까?

은 유창함 API에서 다음과 같은 옵션이 멀티 컬럼 인덱스를 만들려면 :

modelBuilder.Entity<AlbumTrack>().HasIndex(t => new { t.TrackNumber, t.AlbumId).IsUnique(); 

하지만 여분의 ALBUMID 속성을 내 모델을 혼란 때문에 싶어이 들어, 그림자 속성을 사용 싶지 않다 하나의 열이 작동합니다

modelBuilder.Entity<AlbumTrack>().HasIndex(t => EF.Property<int>(t,"AlbumId")).IsUnique(); 

을하지만

modelBuilder.Entity<AlbumTrack>() 
    .HasIndex(t => new { t.TrackNumber, EF.Property<int>(t,"AlbumId")}) 
    .IsUnique(); 
0을 다음과 같이, 그림자 propertie를 사용하여 다중 열 인덱스

vscode에서 다음 오류가 발생합니다.

잘못된 익명 유형 멤버 선언자가 잘못되었습니다. 익명 형식 멤버는 멤버 할당, 단순한 이름 또는 멤버 액세스로 선언해야합니다.

아무도 그림자 속성을 사용하여이 작업을 수행하는 방법을 알고 있습니까? 그렇지 않습니다.

+0

당신이 바로, '무엇을 작동하지 않습니다'의 끔찍한 설명은, 내가 업데이트됩니다 문제. –

+0

불행히도 이름을 정의하더라도 (.HasIndex (t => new {t.TrackNumber, AlbumId = EF.Property (t, "AlbumId")})'컴파일 오류를 피하면 런타임 오류가 발생합니다. 속성 식 't => new <> f__AnonymousType11'2 (TrackNumber = t.TrackNumber, AlbumId = Property (t, "AlbumId"))'이 (가) 유효하지 않습니다. 식은 속성 액세스를 나타냅니다. 't => t.MyProperty 여러 속성을 지정할 때 't => new {t.MyProperty1, t.MyProperty2}'. 매개 변수 이름 : propertyAccessExpression * ". 익명 형식을 사용하면 내 대답의 문자열 과부하가 현재 유일한 선택입니다. –

답변

4

가능합니다. params string[] propertyNames과 함께 HasIndex 오버로드를 간단하게 사용할 수 있습니다.

modelBuilder.Entity<AlbumTrack>() 
    .Property<int>("AlbumId"); 

을 다음 인덱스 정의 :

먼저 그림자 속성이 정의되어 있는지 확인

modelBuilder.Entity<AlbumTrack>() 
    .HasIndex("TrackNumber", "AlbumId") 
    .IsUnique(); 
+1

예, 그것은 매우 간단합니다, 대단히 감사합니다. 속성 메소드는 .Property와 같이 가지고 있지 않지만 anybodies IDE가 그걸 포착하지는 않을 것입니다, 감사합니다. –