1

간단한 모델 속성 유효성 검사가 필요합니다.모델의 DB 외부 키 유효성 검사

Gender 
GenderID GenderName 

내가 생각하는 것 :

public class PersonDTO 
{ 
    public int? GenderId { get; set; } 
} 

내가 GenderId이 사람에 대한 외래 키, 데이터베이스에서 테이블 것을 알고 GenderId을 검증 깨끗한 방법이 필요합니다 내가 같은 필드가 말할 수 있습니다 :

[Range(1, 10, ErrorMessage = "GenderId is out of range")] 
public int? GenderId { get; set; } 

여기에서 1과 10은 GenderId의 하위 값과 상위 값으로 간주됩니다. 옵션이 아닙니다.

DB에서 모든 GenderID를 선택하는 사용자 정의 유효성 검사기에 대해 생각하고 원하는 경우에만 표시됩니다. 그것은 더 나은 방법이지만, 내가 원하는 것처럼 간단합니다. 비슷한 유효성 검사가 필요한 5 개의 필드가 있습니다.

어쩌면 내가 인식하지 못하는 방식으로 구축 되었습니까? 감사합니다.

추신. DB 액세스를 위해 Entity Framework를 사용하고 있습니다. 이 같은 내용은

답변

2

, 당신은 더 낫다 당신의 POST 액션에 수동 검증을 수행 :

public ActionResult SomeAction(PersonDTO model) 
{ 
    var gender = db.GenderIDs.SingleOrDefault(m => m.Id == model.GenderID); 
    if (gender == null) 
    { 
     ModelState.AddModelError("GenderID", "That is not a valid id"); 
    } 

    if (ModelState.IsValid) 
    { 
     ... 
+0

내가 언급하지 않았다, MVC의 API 컨트롤러는 DTO 객체를받습니다. 컨트롤러 나 다른 곳에 이러한 유효성 검증을 추가하여 각 요청에서이 제한 조건을 점검하면 데이터베이스에 복잡성과 불필요한 작업이 추가됩니다. 어쩌면 더 좋은 방법이 있습니다. – makambi

+0

알고 있었지만 코드가 다소 혼란 스러웠습니다. 더 명시 적으로 업데이트했습니다. –

+1

당신이 가지고있는 문제는 이것에 대한 유효성 검사가 데이터베이스 액세스를 필요로한다는 것인데, 이는 DTO 클래스 자체에 추가하기에 적절하지 않습니다. 위의 코드를 여러 액션에 다시 사용하기 만하면 맞춤 액션 필터를 만들 수 있습니다 (http://www.asp.net/mvc/tutorials/hands-on-labs/aspnet-mvc-4 참조). -custom-action-filters 또는 http://msdn.microsoft.com/en-us/library/dd381609(v=vs.100).aspx) –