0

UserName、Profileプロパティなどのユーザーデータと、テーブルがUserId(guid)を介して関連付けられているデータベース内の他のテーブルの他のデータが必要になることがよくあります。説明させてください。

aspnet_Users table:
UserId
username
...

Some table from which I retrive data:
Id
Post
DateTime
UserId
...

したがって、私がプルする投稿ごとに(通常は一度に20以上)、それぞれにユーザー名が必要です。次のようなものを呼び出すのは高価な取引のようです:

  string username = Membership.GetUser(UserID).UserName;

アイテムごとに。データベースに対してさらに20回の呼び出しを行っているようです。これを行うための適切な方法は何ですか?Linq to Sqlスキームにaspnet_Usersテーブルを含めてから参加して、一度にプルできるようにする必要がありますか?

4

2 に答える 2

2

Linq to Sqlスキームにaspnet_Usersテーブルを含めてから参加して、一度にプルできるようにする必要がありますか?

はい、少なくともそれが私のやり方です。

もう1つのオプションは、辞書を作成してそこにすべてのユーザーを保存し、メモリ内でルックアップを実行することですが、その場合、ユーザーの変更を監視する必要があるため、結合ははるかに簡単なソリューションのようです。

于 2012-04-29T07:17:30.263 に答える
1

あなたはする必要はありません。少なくとも2つの可能なアプローチがあります。

まず、独自のデータベースとデータベースのカスタムテーブルを使用するカスタムメンバーシッププロバイダーを作成できます。このようにして、2つのデータベースを処理したり、追加の呼び出しを実行したりする必要がありません。

次に、データベースを使用するビルトインSqlMembershipProviderを使い続けたい場合aspnetdb、つまりユーザーデータベースとアプリケーションデータベースの2つのデータベースがある場合は、アプリケーションデータベースからデータベースにリンクされたサーバー/シノニムを作成できaspnetdbます。sqlmetal.exeリンクされたテーブルのlinq2sqlモデルを生成できないという小さな問題がありますが、両方のデータベースのモデルを作成してから、同じ名前空間に配置することができます。

http://netpl.blogspot.com/2008/06/linq-and-synonyms-linked-servers.html

このようにして、データベース間で結合を作成できるようにするリンクされたテーブルを持つデータベースのlinq2sqlモデルが得られます。あなたのシナリオでは、それはユーザー名で投稿を取得するための単一のlinq2sqlステートメントを意味します。

于 2012-04-29T10:22:30.310 に答える