1

このシナリオの例を検索/見つける際に精神的なブロックが発生しています。

ユーザー A がログオンし、"abcServer" の "master" データベースに接続して、アカウントを確認します。承認されると、サーバーは「unique-A」データベースの接続文字列を「abcServer」のユーザー A に返します。

EF の dbContext には connString 名を割り当てるコンストラクターがあることは知っていますが、これを動的にしたい:

(1) DbContext

    // dbContext constructor
    public MasterDatabase() : base("name=MasterDatabase")
    {
        Configuration.LazyLoadingEnabled = false;
    }

(2) デフォルトの接続は

  // web.config
  <connectionStrings>
    <add name="MasterDatabase" connectionString="Data Source=abcServer;Initial      
        Catalog=Master;Integrated Security=True;" providerName="System.Data.SqlClient" />
  </connectionStrings>

しかし、connStr のハードコーディングは以上です。プロジェクトの残りの部分は、ログインが成功して接続文字列が返されるまで決定されない、データベース内の EF クラスを操作するそれぞれのユーザーに関するものです。このようなもの:

(3) コントローラ内でconn文字列を変更する方法

   // in api controller, once log in successful, call to method return value as parameter
   private void Connect2DbwithThisUsersConnString(string connStr)
    {
   // change the conn string & USE THIS CONTEXT to this user's db
    }

これのasp.net/mvcの例はありますか? 前もって感謝します。ここで気が狂います。

覚えておいてください: ログインするまで接続文字列はわかりません。これは新しいユーザーである可能性があり、その場で新しいデータベースを作成し、その connStr を渡す必要があります。一意の dbContext "base" または conn 文字列をハードコーディングできません。

ご清聴ありがとうございました!

4

3 に答える 3

0

これは私にとってはうまくいきました。誰かがエラーを見たり、より良い方法を知っていますか?

// in controller/server //
private static void Init(string connStr)
 var connString = "Data Source=abcServer;Initial Catalog=" + dbName + ";Integrated Security=True;";
 var connBuilder = new SqlConnectionStringBuilder(connString);
 var defaultContext = new DefaultDb(); //Context #1 - default connection from web.config
 var otherContext = new OtherDb(connBuilder.ToString()); //Context #2 dynamic connection
 ..... 
 }

// in OtherContext.cs //
     public partial class OtherContext
     {
         public OtherContext(string connectionString) : base(connectionString) { }
     }

     public partial class OtherContext: DbContext   
     {
         public OtherContext() : base("name=DefaultConnection") { }
     }

    // the migration file //
     public class Configuration : DbMigrationsConfiguration<OtherContext>
     {
         public Configuration()
         {
             AutomaticMigrationsEnabled = true;
             AutomaticMigrationDataLossAllowed = true;
         }
     }
于 2013-08-06T17:09:24.903 に答える