2009-06-05 5 views
6

私は、さまざまな大手クライアントが当社のウェブサイトにログインし、さまざまなページをクリックしてその売上に基づいて分析データを表示できるサイトを作成する作業を行っています。現在ログインしているユーザーに基づいて、LINQで異なるデータベースを扱う?

ユーザーに基づいて複数のデータベースを処理する最良の方法についてお考えの人はいませんか?私たちは3大名のクライアントを持っていると言う、設計の決定は、それぞれの大きなクライアントが独自のデータベースを持って行われている。

clientAのユーザーがシステムにログインすると、会社のアナリティクスが表示され、モデルはclientAのデータコンテキストからプルダウンする必要があります。同様に、誰かがログインしてデータベースのclientBに関連付けられている場合、そのデータコンテキストからデータを取得する必要があります。

可能であれば、LINQで1つのデータアクセスレイヤークラスを作成し、ログイン時にそのユーザーと関連付けられたDataContextを渡す方法があります。誰かがこれを行うための適切な、またはきれいな方法を考えることができますか?

+0

スキーマはすべてのデータベースで同じですか? – BFree

+0

@BFree、私がやるクエリーについては同じです。それらは最終的に2つの列で異なるかもしれませんが、私が実行するLINQクエリに関しては異なりません。 –

+0

@TankMan、あなたがしていることをデータベースシャーディングといいます。 – tuinstoel

答えて

9

スキーマがすべてのデータベースで同じ場合は、非常に簡単です。 datacontextには接続文字列をとるオーバーロードがあります。一元的な場所(データベース、XML、リソースなど)にさまざまな接続文字列を格納し、その接続文字列でデータコンテキストを作成し、誰が接続しているかにかかわらず使用できます。

+0

私が持っている質問は、datacontextの切り替えやその特定のユーザーに基づく別のものの使用方法です。 –

+0

私はBFreeに同意します。ピボットポイントが接続文字列になります。 –

+0

@TankMan:それは接続文字列のすべてです。別のユーザーが接続したことを検出した場合は、それらの接続文字列を取得し、その接続文字列を持つDataContextを新規に作成します。 – BFree

関連する問題