2016-07-01 10 views
-1

MVCを使用してasp.net MVCアプリケーションを作成しています。私は5人のユーザーがいますが、データベースは同じですが、dum001、dum002などのデータベースのコピーを作成しています。ですから、5つの接続文字列を設定することは可能ですか、それともweb.configでさらに設定できますか?ユーザーのログイン時にデータベースにリダイレクトするので、データベースを使用することができます。複数の接続文字列を操作するasp.net MVC

+0

定義できる接続文字列の数に制限があると思われる理由がわかりません。限り、ユーザーごとに別のデータベースを使用する限り、それはあなた次第です。 –

+0

しかし、データベース名 –

+0

を使用してユーザーに接続文字列を指定する方法は、設定ファイル、データベースなどに格納するかどうかにかかわらず、完全にあなた次第です。複数のシングルテナントデータベースを使用する予定の場合は、それらをマップする正しい方法を見つける必要があります。 –

答えて

1

web.configに必要な数の接続文字列を作成できます。

データベースへのアクセスに使用しているデータアクセスレイヤーによって、ユーザーに基づいて接続文字列を切り替える方法が複数用意されている可能性があります。

オプション1:ベスト

代わりに、各ユーザーの接続文字列を格納するに、「マスター」データベースに一つだけの接続文字列を格納します。このマスターDBは、ユーザー、セッション、ユーザー固有の設定(たとえば、どのデータベースが自分のデータベースなのかなど)を知っていることを担当します。

ユーザーがログインすると、マスターDBをユーザー検索に使用し、そのユーザーのセッション変数としてMVCアプリへの接続文字列を提供することができます。この接続文字列データは、MVCアプリケーションで使用され、データアクセスレイヤー(DAL)を介してDB接続を動的に作成します。

マスターDBレベルのボトルネックを防ぐには、設定をキャッシュする必要があります。もちろん、これはすべてサーバー側になります。接続文字列をワイヤを介してクライアント側に公開しないでください。

これは設定可能で、管理しやすく、望ましいものです。

オプション2:ハードコードされたハック

PS。これは良い習慣ではなく、あなたを燃やすでしょう。

ユーザーが5人しかなく、ユーザーが5人しかなく、ユーザーごとに同じユーザー名を使用する場合は、ユーザー名を接続文字列のプレフィックスとしてハードコードできます。同様に:

指定されたユーザー名= ryancdotnet 指定されたユーザー名= armardip

<connectionStrings> 
    <add name="ryancdotnetConnString" connectionString="server=ServerName;database=dum001;uid=username;password=pwd;"/> 
    <add name="armardipConnString" connectionString="server=ServerName;database=dum002;uid=username;password=pwd;"/> 
</connectionStrings> 

は、その後、あなたはまだ、動的にログインしているユーザーに基づいて、DALの接続文字列をインスタンス化します

一般的な例

using System.Configuration 
[...] 
string connectionString = System.Configuration.ConfigurationManager. 
ConnectionStrings[username + "ConnString"].ConnectionString; 

EntityFrameworkの例

//where MyDbContext is derived from DbContext (EntityFramework) 
public void InitializeDbContext(string curUsername) 
{ 
    myDbContext = new MyDbContext(curUsername + "ConnString"); 
} 

これはあなたに役立ちますように!

+0

ありがとう。本当に役に立ちました... –

関連する問題