4

내 법인의 Name 속성에 대해 복합 고유 제약 조건이 필요합니다. 이는 Category (FK가있는 경우) 당 고유합니다.EF 코어에서 복합 고유 제한/인덱스 생성

그래서 이런 일이 : 나는 마이그레이션을 생성 할 때

entityTypeBuilder 
    .HasIndex(i => new { i.Name, i.Category.Id }) 
    .IsUnique(); 

하지만이 때문에 Category.Id 탐색 속성의 실패합니다.

값을 문자열로 하드 코딩 할 수 있다는 것을 알고 있지만 정적 입력을 잃고 싶지 않습니다.

어떤 옵션이 있습니까?

답변

4

문제의 엔터티에 CategoryId 범주의 외래 키를 추가하고 탐색 속성 대신 색인 작성 도구에서 해당 외래 키를 사용하십시오.

+0

그래,하지만 지저분한입니다. 그게 유일한 옵션입니까? – grokky

+0

왜 지저분하다고 생각하십니까? 외래 키 속성을 추가하는 것은 지저분하지 않습니다. 왜 그렇게 생각합니까? @grokky – kizilsu

+1

@grokky - 나는 외래 키 속성을 정의하는 것이 지저분하다고 주장 할 것이다. [EF docs는 그것을 권장합니다.] (https://docs.microsoft.com/en-us/ef/core/modeling/relationships#no-foreign-key-property), 그림자 속성을 소개하지 않을 것입니다. . – steamrolla

3

문자열 기반 섀도 속성 이름을 알 자마자, 당신이 사용할 수있는 (적어도 EF 코어 1.1.0) HasIndex 방법 overload

public virtual IndexBuilder HasIndex(params string[] propertyNames) 

예를 들어,

entityTypeBuilder 
    .HasIndex("Name", "CategoryId" }) 
    .IsUnique(); 
HasAlternateKey에 대한 동일

:

entityTypeBuilder 
    .HasAlternateKey("Name", "CategoryId" }); 
+0

그래, 그게 내가 지금하고있는 일이야. 내가 질문에서 말했듯이, 당신은 정적 타이핑을 잃는다. 아마도 이것이 유일한 방법 일 것입니다. – grokky