私のSilverlightソリューションには3つのプロジェクトファイルがあります
- Silverlightパーツ(クライアント)
- Webパーツ(サーバー)
- エンティティモデル(別のプロジェクトでメタデータと一緒にedmxを維持しました)
メタデータファイルは、関連するデータアノテーション検証を備えた部分クラスです。
[MetadataTypeAttribute(typeof(User.UserMetadata))]
public partial class User
{
[CustomValidation(typeof(UsernameValidator), "IsUsernameAvailable")]
public string UserName { get; set; }
}
ここで私の質問は、このクラスをどこに保持する必要があるかですUsernameValidatorメタデータクラスとedmxがサーバー側(Web)にある場合、Webプロジェクトに.shared.csクラスを作成してから、適切な静的メソッドを追加する必要があることがわかります。
私のIsUserAvailableメソッドインターンは、asyc検証の一部としてdomainserviceメソッドを呼び出します。
[Invoke]
public bool IsUsernameAvailable(string username)
{
return !Membership.FindUsersByName(username).Cast<MembershipUser>().Any();
}
メタデータクラスがドメインサービスと同じプロジェクトにある場合は、UsernameValidator.Shared.csクラスからドメインサービスメソッドを呼び出すことができます。
しかし、ここで私のエンティティモデルとメタデータは別々のライブラリにあります。
任意のアイデアをいただければ幸いです
ジェフはここhttp://jeffhandley.com/archive/2010/05/26/asyncvalidation-again.aspxでasyc検証について素晴らしく説明しました が、これはモデル、メタデータ、共有クラスがすべてサーバー側にある場合にのみ機能します。