2010-12-15 5 views
1

모델에 고유해야하는 속성의 유효성을 검사하는 방법이 있습니까? 예를 들어 사용자는 "제품"을 만들고 편집 할 수 있지만 기존 ProductCode가있는 제품을 만들 수 없으며 제품을 편집하고 ProductCode를 기존 코드로 변경할 수 없어야합니다.MVC 2 고유 인덱스 유효성 검사

사용자 지정 특성을 사용해 보았습니다.

이 솔루션으로 내가 다룰 수있는 것은 코드가 이미 DB에있을 때 사용자가 제품을 삽입/업데이트 할 수 없도록하는 것입니다. 이렇게하면 사용자가 제출할 때 기존 제품을 편집 할 수 없으므로 코드가 이미 존재합니다 (수정하려는 제품의 코드가됩니다). false를 반환합니다.

MVC 2에서 고유 인덱스를 처리 할 방법이 없으므로 몇 시간 동안 검색해 보았습니다. stackoverflow에서 다른 주제를 찾았지만 솔리드 솔루션은 없습니다.

+0

아마도 귀하의 질문에 대한 오해가 있지만 ProductCode가 기본 키입니까? 그렇지 않다면, 왜? –

답변

3

삽입 또는 업데이트가 실패하고 적절한 오류 메시지가 사용자에게 반환됩니다. 항상 사용자가 수 표 확인 후 즉시 데이터베이스를 수정할 수있는 기회가 있기 때문에 전면을 확인하는 것이 문제가됩니다.

여기 인해 고유 제한 조건에 객체를 삽입하고 실패 여부를 확인하는 방법의 예 : 개체가 이미 존재

INSERT INTO MyTable (column1, column2, column3) 
    SELECT @param1, @param2, @param3 
    WHERE NOT EXISTS (SELECT * FROM table WHERE id = @param4) 

경우,이 0 행을 수정합니다. 그렇지 않으면 1 행을 수정합니다. 다른 것이 잘못 될 경우 예외가 발생합니다. 이것은 (적어도 SQL 서버에서는) 매우 효율적입니다. 당신이 원하는대로 인덱스 찾기와 그 다음에 인덱스 업데이트가 발생합니다. 내가보고 좋아

+0

이 문제를 해결책으로 생각했지만 문제는 고유 인덱스 또는 다른 이유로 인해 업데이트가 실패했는지 여부를 확인하는 "적절한"방법이 없다는 것입니다. 내가 볼 수있는 유일한 방법은 먼저 예외와 내부 예외가 모두 예상되는 형식과 일치하는지 확인한 다음 내부 예외 메시지에서 문자열 일치를 확인하는 것입니다. 그러나 이로 인해 문제가 발생할 수 있습니다. 나는 동시에 여러 업데이트에 대해 염려하지 않는다. 그것은 예외를 던질 수 있고 그들은 다시 시도 할 수 있습니다 ... 그것은 매우 드물게 일어날 것입니다, 많은 사용자 또는 업데이 트가 없습니다 – Craigt

+0

나는이 방법을 두 번째 것입니다. DB에 약간의 작업을 시키십시오.SQL이 고유 키 위반에 대해 고유 한 예외 코드를 던질 것이라고 확신합니다. 이 코드를 사용하여 사용자에게 알리십시오. – Pradeep

+0

.NET에서 SQL 예외를 catch하는 것은 문제가 있지만 고유 한 제약으로 인해 삽입이 실패했는지 확인할 수있는 유일한 방법은 아닙니다. 나는 나의 답을 표본으로 삼을 것이다. –

0

나는 관련 분야에서 MVC와 조금 어려움을 겪었다.

내 질문에 대답의 일부는 "아마도"개체의 삽입 및 업데이트에 대한 별도의 모델이 있어야한다는 것이 었습니다.

그런 식으로 삽입 모델에 맞춤 속성을 추가 할 수 있습니다.

그렇지 않으면 사용자 정의 속성이 아닌 삽입 메소드의 일반 코드 검사로 처리하십시오.

+0

두 모델에 대해서도 생각했습니다. 그러나 속성을 사용할 때 제품 코드가 변경되었는지 여부를 확인할 방법이 없습니다. – Craigt

0

....

당신이 "동일하지 않습니다"는이 개체에 대한 몇 가지 고유 한 ID 존재를 확인 할 수 - 당신은 제품 코드가 아니라에서의 존재를 확인하는 방법 현재 제품.

관련 문제