12

asp.net(MVCを使用していますが、これは通常でも発生します)

Profile.GetProfile(username);

そのユーザーの LastActivityDate を更新します。これは、他の誰かがそのユーザーのプロファイルを表示している場合には意図されていません。

メンバーシップ クラスでは、次のように、この日付を 2 番目のパラメーターで更新するかどうかを指定できます。

Membership.GetUser(username, false); // doesn't update LastActivityDate
Membership.GetUser(username, true); // updates LastActivityDate

独自のプロバイダーを作成せずに、プロファイルプロバイダーで同様のことを行う方法はありますか?

4

2 に答える 2

10

aspnet_Profile_GetPropertiesストアド プロシージャの変更を含む 1 つの醜い回避策を使用する場合があります。これは、ユーザー プロファイルへのアクセス中にプロパティを取得する役割を果たします。

この手順を開くと、下部に次のコードが表示されます。

IF (@@ROWCOUNT > 0)
BEGIN
    UPDATE dbo.aspnet_Users
    SET    LastActivityDate=@CurrentTimeUtc
    WHERE  UserId = @UserId
END

の更新を停止するには、削除してLastActivityDateください。を呼び出すと、引き続きLastActivityDate更新されMembership.GetUser(username, true);ます。

于 2011-08-08T13:24:53.150 に答える
1

独自のプロバイダを作成するのではなく、他の誰かが作成したプロバイダを使用することを検討するかもしれません。

Scott Guthrie のブログのこれには、情報を取得するために独自のコードから直接呼び出すことができるストアド プロシージャが含まれています。

http://weblogs.asp.net/scottgu/archive/2006/01/10/435038.aspx

このページには、カスタム プロファイル データを操作するためのサンプル アプリケーションをインストールする msi ダウンロードがあります。テーブル ベースのプロファイルは、すべてのプロファイル データが 1 つのデータベース フィールドに含まれている既定のプロファイルよりもはるかに優れたパフォーマンスを発揮します。テーブルベースのものは、直接クエリするのもはるかに簡単で、質問に役立ちます. サンプル スキーマのストアド プロシージャは、getCustomProfileDataと呼ばれます。

それ以外の場合は、データベースに直接クエリを実行してください。

于 2010-08-09T07:57:07.537 に答える