/// <summary>
        /// 新しいメンバーシップユーザーをデータソースに追加します。
        /// </summary>
        /// <returns>
        /// 新しく作成されたユーザーの情報が格納された <see cref="T:System.Web.Security.MembershipUser"/> オブジェクト。
        /// </returns>
        /// <param name="username">新しいユーザーのユーザー名。</param>
        /// <param name="password">新しいユーザーのパスワード。</param>
        /// <param name="email">新しいユーザーの電子メール アドレス。</param>
        /// <param name="passwordQuestion">新しいユーザーのパスワードの質問。</param>
        /// <param name="passwordAnswer">新しいユーザーのパスワードの解答。</param>
        /// <param name="isApproved">新しいユーザーを承認するかどうか。</param>
        /// <param name="providerUserKey">メンバーシップ データ ソースでのユーザーの一意の識別子。</param>
        /// <param name="status">ユーザーが正常に作成されたかどうかを示す <see cref="T:System.Web.Security.MembershipCreateStatus"/> 列挙値。</param>
        public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
        {
            status = MembershipCreateStatus.ProviderError;

            // パスワードの保護
            var securePassword = new SecureString();

            securePassword.AppendString(password);

            // 認証の作成
            var membership = new DomainModels.Membership(
                new MembershipEntity
            {
                Name     = username,
                Password = securePassword,
            });
            var result = MembershipCreateStatus.ProviderError;

            membership.Created += (sender, entity) => { result = MembershipCreateStatus.Success; };
            membership.Create();
            status = result;

            var user = default(KandaMembershipUser);

            membership.Found += (sender, entity) => { user = new KandaMembershipUser(entity); };
            membership.Find();

            return(user);
        }
        /// <summary>
        /// 新しいメンバーシップユーザーをデータソースに追加します。
        /// </summary>
        /// <returns>
        /// 新しく作成されたユーザーの情報が格納された <see cref="T:System.Web.Security.MembershipUser"/> オブジェクト。
        /// </returns>
        /// <param name="username">新しいユーザーのユーザー名。</param>
        /// <param name="password">新しいユーザーのパスワード。</param>
        /// <param name="email">新しいユーザーの電子メール アドレス。</param>
        /// <param name="passwordQuestion">新しいユーザーのパスワードの質問。</param>
        /// <param name="passwordAnswer">新しいユーザーのパスワードの解答。</param>
        /// <param name="isApproved">新しいユーザーを承認するかどうか。</param>
        /// <param name="providerUserKey">メンバーシップ データ ソースでのユーザーの一意の識別子。</param>
        /// <param name="status">ユーザーが正常に作成されたかどうかを示す <see cref="T:System.Web.Security.MembershipCreateStatus"/> 列挙値。</param>
        public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
        {
            status = MembershipCreateStatus.ProviderError;

            // パスワードの保護
            var securePassword = new SecureString();
            securePassword.AppendString(password);

            // 認証の作成
            var membership = new DomainModels.Membership(
                new MembershipEntity
                    {
                        Name = username,
                        Password = securePassword,
                    });
            var result = MembershipCreateStatus.ProviderError;
            membership.Created += (sender, entity) => { result = MembershipCreateStatus.Success; };
            membership.Create();
            status = result;

            var user = default (KandaMembershipUser);
            membership.Found += (sender, entity) => { user = new KandaMembershipUser(entity); };
            membership.Find();

            return user;
        }
        /// <summary>
        /// データ ソースからユーザーの情報を取得します。
        /// ユーザーの最終利用日時スタンプを更新するオプションも提供されます。
        /// </summary>
        /// <returns>
        /// データ ソースから取得された指定のユーザーの情報が格納された <see cref="T:System.Web.Security.MembershipUser"/> オブジェクト。
        /// </returns>
        /// <param name="username">
        /// ユーザー情報を取得するユーザーの名前。
        /// </param>
        /// <param name="userIsOnline">
        /// ユーザーの最終利用日時スタンプを更新する場合は true。
        /// ユーザーの最終利用日時スタンプを更新しないでユーザー情報を返す場合は false。
        /// </param>
        public override MembershipUser GetUser(string username, bool userIsOnline)
        {
            var membership = new DomainModels.Membership(new MembershipEntity
            {
                Name = username,
            });
            var user = default(KandaMembershipUser);

            membership.Found += (sender, entity) =>
            {
                user = new KandaMembershipUser(entity);
            };
            membership.Find();

            return(user);
        }
        /// <summary>
        /// データ ソースからユーザーの情報を取得します。
        /// ユーザーの最終利用日時スタンプを更新するオプションも提供されます。
        /// </summary>
        /// <returns>
        /// データ ソースから取得された指定のユーザーの情報が格納された <see cref="T:System.Web.Security.MembershipUser"/> オブジェクト。
        /// </returns>
        /// <param name="username">
        /// ユーザー情報を取得するユーザーの名前。
        /// </param>
        /// <param name="userIsOnline">
        /// ユーザーの最終利用日時スタンプを更新する場合は true。
        /// ユーザーの最終利用日時スタンプを更新しないでユーザー情報を返す場合は false。
        /// </param>
        public override MembershipUser GetUser(string username, bool userIsOnline)
        {
            var membership = new DomainModels.Membership(new MembershipEntity
                                                             {
                                                                 Name = username,
                                                             });
            var user = default(KandaMembershipUser);
            membership.Found += (sender, entity) =>
                                    {
                                        user = new KandaMembershipUser(entity);
                                    };
            membership.Find();

            return user;
        }