2010-05-06 5 views
2

데이터베이스에 중복 값을 가질 수없는 필드가있는 객체를 상상해보십시오. 필자의 첫 번째 본능은 속성에 데이터 주석으로 적용 할 수있는 고유 한 속성을 만드는 것이 었습니다. 이 고유 한 속성은 데이터베이스에 도달하여 값이 이미 존재하는지 점검합니다. 이것은 create 메소드를 실행할 때 작동하지만 업데이트시 실패합니다. 업데이트시, 값을 변경하지 않으려는 엔티티의 모든 고유 필드에 대해 중복 값 오류가 발생합니다. ModelState와 잘 어울리는 방식으로 ASP.NET MVC 2에서이를 수행하기위한 좋은 방법이나 기존의 관행은 무엇입니까? 내 객체의 id를 속성 검사기에 전달하면 발견 된 중복 값이 ​​내가 업데이트하는 것과 동일한 엔터티인지 여부를 검사하여 작동 할 수 있지만 유효성 검사기 내부에서 해당 데이터를 가져 오는 방법을 알지 못합니다.유효성 검사를 사용하여 ASP.NET MVC 2에서 속성의 고유성을 적용하려면 어떻게해야합니까?

어리석은 질문이거나 비 일관 적으로 말하면 용서 해주십시오. 그것은 아침에 거의 3이고 나는 어제 아침 이후로 코딩을 해왔습니다.

답변

2

이러한 종류의 유효성 검사를 위해 데이터베이스가 이미 잘 수행하도록합니다. 데이터베이스에 고유 제한 조건이 있는지 확인하고 위반 한 경우 오류를 다시보고하도록하십시오. 그런 다음 오류를 모델 오류에 추가 할 수 있습니다 (단순한 SQL 오류의 계획이 아닌 친숙한 텍스트로). 당신이 자신을 확인 수행하기로 결정하는 경우

,이 예에서 ... 현재 레코드를 제외하여 업데이트 문제를 해결

SELECT COUNT(*) 
FROM myTable 
WHERE myTable.UniqueValue = 'ShouldBeUnique' 
AND myTable.Id <> 5 

를 얻을 수 있습니다, 당신은 업데이트 할 레코드의 ID를 사용 확인을 피하기 위해 다른 레코드를 검사하여 고유 한 값이 들어 있는지 확인해야합니다.

+1

데이터베이스가 유효성 검사를하도록하면 최상의 결정이됩니다. 내 응용 프로그램의 추가 쿼리를 사용하여 유효성 검사를 수행하면 실제 데이터 삽입 또는 업데이트를 수행 할 때 나중에 변경 될 수있는 상태를 알 수 있습니다. 데이터베이스에 이미 해당 제약 조건이 있지만 예외를 사용하여 오류 메시지를 표시하지 않았습니다. 내 관심사를 별도로 유지하려고했지만 컨트롤러에서 ModelState를 서비스로 전달하고 Repo에서 서비스로 전달하는 것과 같은 일을해야한다고 생각합니다. 나는 더 깨끗한 것을 원했다. – adolfojp

관련 문제