1

私が使用していて、多くの追加フィールドを格納するためにonと 1:1 の関係を持つというASP.NET Membership名前のテーブルがあります。これらのフィールドの 1 つは、承認目的で通常のロールと組み合わせて、ほぼすべてのページで使用されるフィールドです。UserProfilesaspnet_UsersUserIdOrganisationID

そのため、ログインしているユーザーの OrganizationID を頻繁に確認する必要があります。これには使用したくありませんSession。メンバーシップ Cookie を使用して、毎回データベースを呼び出したいと思います。

サイトのマスター ページに次のプロパティを設定すると、パフォーマンスがどの程度低下しますか。

public UserProfile loggedInUser
{
    get
    {
        if (HttpContext.Current.User.Identity.IsAuthenticated)
        {
            if (Membership.GetUser() != null)
            {
                Guid userId = (Guid)Membership.GetUser().ProviderUserKey;
                using (var db = new DatabaseContext())
                {
                    return db.UserProfiles.Where(l => l.UserId == userId).FirstOrDefault();
                }
            }
        }
        return null;
    }
}

サイトは大規模ではなく、トラフィックも大規模ではありません。これはOKなアプローチですか?

4

1 に答える 1

0

.Where の代わりに .Find を使用できます。これは、一般に、主キーで単一のエンティティを取得する場合のより良いアプローチです (例のように)。

毎回新しいコンテキストを作成しているので、違いはないと思います。私だったら、依存性注入 (Web リクエストごとの有効期間などを使用) を介して DbContext を注入してから、Find を使用するでしょう。このように、このプロパティを複数回使用すると、オーバーヘッドが大幅に削減されます。

興味がありますが、これにセッション変数を使用したくないのはなぜですか? セッションのサイズを大きくしすぎることを心配していますか? おっしゃるとおり、これは大規模なサイトではなく、ユーザーごとのモデルです。

于 2013-07-26T18:25:52.940 に答える