2017-03-21 10 views
0

データベース(MySQL)にはDemoDBがあります。私たちはdbを使用する異なるアカウントを持っています。アカウントごとに1つのデータベースが作成され、Account1DB、Account2DBと言います。テーブルストアドプロシージャと関数はすべて同じです。 Web APIを開発し、データの挿入や更新のためのサービスを提供する必要があります。ユーザーはAccountNameを指定することでログインします(WPFアプリケーションから、フィールドはUserName、Password、およびAccount ComboBoxです)。ユーザーがログインするアカウントに接続文字列の初期カタログを設定する必要があります(実際にアカウントに基づいてユーザーの資格情報を確認する必要があるため、ユーザーにログインする前にも初期カタログを設定する必要があります)。プログラムでEntityFrameworkのConnectionStringを設定します。

アン例WPF画面:

ユーザー名:

パスワード:秘密

アカウント:Account1

ユーザーがログインをクリックすると、これは私がやりたいものです。

1: - >接続文字列の初期カタログをAccount1DBに設定する

2: - >次に、ユーザーが行うすべてのDB操作(認証を含む)はAccount1DBスキーマにある必要があります

私はデータベースファーストアプローチに行きたいと思います。これはどのようにアプローチするのですか?事前に

おかげで、

Abhilash D K

答えて

1

あなたは、パラメータとしてれたconnectionStringを取り、DbContextのコンストラクタをベースに、それを渡すためにDbContextから派生しますクラスを変更することができます。このよう

public class ConnectionStringFactory 
{ 
    public string GetConnectionString(string initialCatalog) 
    { 
     SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); 
     builder.InitialCatalog = initialCatalog; 

     // Set another connection parameters 

     return builder.ToString(); 
    } 
} 

は今、あなたは、別のコンテキストで動作する資格情報をチェックして、すべてのDB操作を実行することができ、何か:

public partial class MyContext : DbContext 
{ 
    public MyContext() : base("name=MyDbName") 
    { 
    } 

    public MyContext(string connectionString) : base(connectionString) 
    { 
    } 

    // Class members 
} 

その後、あなたは、接続文字列の工場のようなものを使用することができます

ConnectionStringFactory factory = new ConnectionStringFactory(); 
    string connectionString = factory.GetConnectionString("Account1DB"); 
    MyContext context = new MyContext(connectionString); 
+0

こんにちは、私は試してみてください:) –

+0

こんにちはどこでGetConnectionString()メソッドを呼び出す必要がありますか? MyContextクラスのオブジェクトを作成している間は正しいですか? –

+0

こんにちは。私は例を示すために投稿を編集しました。私の例では、 'GetConnectionString'メソッドが完全に実装されていないことに注意してください。私はこのような細かいことをする本当の理由を知らないけれども、データベースユーザーと権利の使用をお勧めします。ユーザーごとに別々のdbを使用することは最良の選択ではないようです。 –

0

コースは変更できますが、優先されることはできません。これは、適切なメッセージなしで実行時に例外をスローすることができます、私はこのような状況に挑戦。 このように変更します。

DbContext source; //i assumed you created on 

var entitysb= new EntityConnectionStringBuilder 
       (System.Configuration.ConfigurationManager 
        .ConnectionStrings["EntityConnection"].ConnectionString); 

var sqlsb = new SqlConnectionStringBuilder 
       (entitysb.ProviderConnectionString); 
source.Database.Connection.ConnectionString 
       = sqlsb.ConnectionString; 
+0

例外を回避するには、接続文字列をコンストラクタに渡す必要があります。 –

+0

デフォルトでは、名前を設定しなかった場合は "defaultconnection"にする必要があります。 –

+0

こんにちはタンクは答えを私は試してみましょうとあなたに知らせる:) –

関連する問題