Web API プロジェクトでは、ユーザーがログイン時に別のデータベースを選択できるようにしています。これには、Entity Framework 接続文字列を動的に更新することが含まれます。これを実現する方法は次のとおりです:
接続を変更
データ コンテキスト接続を変更するには、基になる SqlConnection の接続文字列を変更します。 SqlConnectionStringBuilder クラスは、接続文字列を構築する便利な方法を提供します。
<code class="language-csharp">public void Connect(Database database) { // 构建 SQL 连接字符串 SqlConnectionStringBuilder sqlString = new SqlConnectionStringBuilder() { DataSource = database.Server, InitialCatalog = database.Catalog, UserID = database.Username, Password = database.Password, }; // 构建 Entity Framework 连接字符串 EntityConnectionStringBuilder entityString = new EntityConnectionStringBuilder() { Provider = database.Provider, Metadata = Settings.Default.Metadata, ProviderConnectionString = sqlString.ToString() }; // 更新数据上下文的连接 using (var context = new MyDbContext(entityString.ConnectionString)) { // 执行数据库操作 } }</code>
接続の永続性
Web API プロジェクトでは、ユーザーのセッション全体にわたって接続が維持されるべきではありません。各リクエストは、独自の接続文字列をデータ コンテキストに渡す必要があります。これによりセキュリティが確保され、潜在的なデータベース競合が防止されます。接続文字列をセッションに保存することも、パラメータとして API 呼び出しに渡すこともできます。
拡張メソッド
もう 1 つのアプローチは、結合操作を自動的に実行する拡張メソッドを使用することです。次のコードは、これを実現する方法を示しています。
<code class="language-csharp">public static class ConnectionTools { public static void ChangeDatabase(this DbContext source, string initialCatalog, string dataSource, ...) { try { var sqlCnxStringBuilder = new SqlConnectionStringBuilder(source.Database.Connection.ConnectionString); if (!string.IsNullOrEmpty(initialCatalog)) sqlCnxStringBuilder.InitialCatalog = initialCatalog; // 更新连接字符串参数 source.Database.Connection.ConnectionString = sqlCnxStringBuilder.ConnectionString; } catch (Exception ex) { /* 记录或处理异常 */ } } }</code>
その後、この拡張メソッドを使用して接続を簡単に変更できます:
<code class="language-csharp">var selectedDb = new MyDbContext(); selectedDb.ChangeDatabase(initialCatalog: "new-catalog");</code>
以上がWeb API で Entity Framework 接続文字列を動的に変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。