2014-10-10 2 views
5

안녕하세요, 인덱스 데이터 주석 기능을 지원하는 Entity Framework 6.1.1을 사용하고 있습니다. 이것은 잘 작동EF에서 인덱스 데이터 주석에 대한 오류 메시지

[Index("scoreIndex", IsUnique=true)] 
    public int score{ get; set; } 

: 나는 나의 엔티티 클래스에 정의 된 필드가 있습니다. 그러나 점수가 고유하지 않은 경우 메시지를 표시하는 방법을 파악하려고합니다. 지금은 그냥 예외를 throw합니다. 나는 다음을 시도했다

[Index("scoreIndex", IsUnique=true, ErrorMessage="Score must be unique")] 

그러나이 색인 주석 클래스에는 ErrorMessage에 대한 정의가 포함되어 있지 않다. 정상적으로 처리하도록 예외 메시지를 처리하는 방법을 알려주시겠습니까?

+0

색인 속성은 이전이 실행될 때 색인을 작성하도록 EF에 지시하지만 EF가 색인을 시행하게하지는 않습니다. 코드에서 예외를 처리해야합니다. 또는 속성의 유효성을 실제로 확인하는 사용자 지정 데이터 주석을 작성할 수 있습니다. –

답변

2

IndexAttribute은 유효성 검사 특성이 아니기 때문에 ErrorMessage 속성이없고 유효한 값의 범위에 대해 유효성을 검사하는 데 사용되는 IsValid() 메서드가 없습니다.

즉, 일반적인 유효성 검사 속성 (Required, MaxLength 등)과 같이 유효성을 검사하도록 설계되지 않았습니다. IsUnique 특성은 고유 인덱스를 만들기 위해 테이블을 만드는 동안 사용됩니다.

속성을 사용하려면 사용자 정의 속성을 만들어 색인의 고유성을 검사해야합니다. 물론이 인덱스는 ValidationAttribute 클래스를 상속받으며 내부적으로 EF DbContext에 액세스하여 속성 유효성 검사 코드의 고유성을 검사해야합니다.

이 데이터 주석 접근 방식이 마음에 들지 않으면 너무 복잡합니다. try-catch 블록에서 SaveChanges() 메소드에 의해 던져진 DbUpdateException을 처리하고 오류 메시지를 디코딩 한 후 귀하의보기 - 모델.

try 
{ 
    using (var ac = new ApplicationDbContext()) 
    { 
     // Add non-unique data 

     ac.SaveChanges(); 
    } 
} 
catch (DbUpdateException ex) 
{ 
    // Handle index error 
}