사용자 정의 데이터 주석이 작동하는 데 문제가 있습니다. 고객 (CustomerID)의 UsergroupName이 고유하다는 유효성 검증 속성을 추가하려고합니다.데이터 주석을 사용한 사용자 정의 유효성 검사
[MetadataType(typeof(UsergroupMetaData))]
public partial class Usergroup { }
public class UsergroupMetaData
{
[Required()]
public object CustomerID { get; set; }
[Required(ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "UsergroupNameRequired")]
public object UsergroupName { get; set; }
[UniqueUsergroupName(????)]
// what to put here?
}
public class UniqueUsergroupName : ValidationAttribute
{
UsergroupRepository _rep = new UsergroupRepository();
public override bool IsValid(object value, int customerID)
{
var x = _rep.GetUsergroups().ByUsergroupName(value).ByCustomerID(customerID);
// what to put here?
return false;
}
}
"개수> 0"이면 IsValid가 false를 반환해야합니다.
어떻게 수정하여 작동합니까? GetUsergroups()는 IQueryable을 반환합니다.
편집 : 매개 변수로 현재의 CustomerID를 전달할 수있는 방법
[MetadataType(typeof(UsergroupMetaData))]
public partial class Usergroup { }
public class UsergroupMetaData
{
public object CustomerID { get; set; }
[Required(ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "UsergroupNameRequired")]
[UniqueUsergroupName(ErrorMessageResourceType= typeof(Resources), ErrorMessageResourceName = "UsergroupNameExists")]
public object UsergroupName { get; set; }
}
public class UniqueUsergroupName : ValidationAttribute
{
UsergroupRepository _rep = new UsergroupRepository();
public override bool IsValid(object value, int customerID)
{
int usergroups = _rep.GetUsergroups().ByCustomerID(customerID).ByUsergroupName(value.ToString()).Count();
return usergroups >0;
}
}
? 같은 UsergroupName있는 모든 "기타"UsergroupMetaData 를 확인할 수 있도록
/M은
필자의 시나리오에서는 어떻게 적용해야하는지 알 수 없다. 그것은 데이터베이스와 모두를 사용하기 때문입니다. 특히 CustomerID가 nullable이고 필수는 아닌 경우. –
필자는이 아이디어가 귀하의 상황에서 어떻게 사용될 수 있을지 설명하기 위해 필기 코드를 추가했습니다. 그것을 확인하고 그게 당신을 위해 작동하는지 말해봐. 게시물에서 볼 수 있듯이 주요 속성은 특정 속성뿐만 아니라 전체 클래스에 대해 유효성 검사 속성이 작동한다는 것입니다. 어떻게되는지 말해줘. – Meligy