カスタム データ注釈を機能させるのに問題があります。顧客 (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 を返します。
編集:
[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;
}
}
現在の CustomerID をパラメーターとして渡すにはどうすればよいですか?
/M