您的 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 呼叫的參數傳遞。
擴充方法方法
另一種方法是使用自動執行連線操作的擴充方法。以下程式碼示範如何實現此目的:
<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 中的實體框架連接字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!