2012-11-09 2 views
1

내가 예를 들어 개체가 있다고 가정 :Entity Framework/ASP MVC 관계 유효성 검사 : 키 또는 개체를 확인 하시겠습니까?

새로운 도시가 만들어 상황의 몇 가지가 있습니다
public class City 
{ 
    public int CityId { get; set; } 
    public string Name { get; set; } 

    public int StateId { get; set; } 
    public virtual State State{ get; set; } 
} 

.

@Html.DropDownListFor(it => it.StateId, ViewBag.States) 

2) 상황에서 백 엔드 상태가 새로운 수도 : 상태의 관계가 필요

State newState = context.States.Create(); 
newState.Name = "North Takoma"; 

City newCity = context.Cities.Create(); 
newCity.Name = "Springfield"; 
newCity.State = newState; 

context.States.Attach(newState); 
context.Cities.Attach(newCity);  

context.SaveChanges(); 

기존 상태에서 선택하는 관점에서 사용자에 의해, 1) 검증되어야합니다. 질문은 StateID 또는 실제 State 관계 객체에서 유효성을 검사해야합니까? 상기 StateID 채워 아닌 상태 객체 될 제 상황에서

public class CityValidator : AbstractValidator<City> 
{ 
    public CityValidator() 
    { 
     // this? 
     RuleFor(it => it.StateID).NotEmpty(); 

     // or this? 
     RuleFor(it => it.State).NotNull(); 
    } 
} 

(상당히 유사한 데이터 주석을 사용 상황을 여기 FluentValidation 사용하지만 것); 두 번째 상황에서 그 반대의 경우도 마찬가지입니다.

사용자 정의 논리를 내 유효성 검사기에 입력하여 둘 중 하나를 검사 할 수 있습니다. 그러나, 나는 내 견해에서 눈에 거슬리지 않는 검증 속성을 잃어 버린다. 이 문제에 대한 좋은 DRY 솔루션은 무엇입니까?

명확화를위한 편집 :이 예에서는 StateID (기존 상태의 경우) 또는 State 속성 (새 상태의 경우) 중 하나를 설정하여 도시에 State를 할당 할 수 있습니다. 그렇다면 유효성 검사를 설정하고 내보기에서 입력에 '데이터 - 발 필수'속성을 가져 오는 방법은 무엇입니까?

답변

1

내가 올바르게 이해하면 사용자가 상태를 선택했거나 선택하지 않았을 수 있습니까? 내가 맞습니까? 당신을위한

,

첫 번째 경우 : StateID 채워 아닌 상태 개체됩니다.

RuleFor(c => c.StateId).NotEmpty().When(s => s.State != null).WithMessage("Please select state."); 

두 번째 경우 :이 서버 측에서 일어날 것을 요에서 이해 번째 상황

에 대한 반대는, 따라서 당신은 어떤이의 규칙을 필요가 없습니다.

희망이 도움이됩니다.

+0

그래, 나는 그 길로 갔다. 그러나 규칙 집합에서 .When 확장을 사용할 때 신뢰할 수없는 유효성 검사 특성이 설정 될 것이라고 나는 생각하지 않습니다. – enoshixi