帶有外部 connectionStrings.config 文件的 WebPublish 程式碼優先遷移
我目前有一個利用實體框架程式碼優先遷移和 Web 發布的項目,其中連接字元串儲存在 web.config 文件中。
是時候將 connectionStrings 移到 web.config 之外了,因此我們將它們放入 connectionString.config 文件中,並讓 slowcheetah 在 webpublish 上對其進行轉換。
連接字元串.config
<connectionStrings> <!-- Testing Databases --> <add connectionString="server=testserver;database=testdatabasename;user id=someid;password=*******" name="dbname" providerName="System.Data.SqlClient" /> </connectionStrings>web.config 相關部分
<connectionStrings configSource="config\connectionStrings.config"> </connectionStrings>現在,當我載入 Web 發布(建構 - > 發布項目)的對話框時,在設置選項卡中我收到錯誤
No Databases found in the project這表明對話框不夠智能,無法查看 configSource 並從那裡載入數據。我可以確認在我的開發環境中正確載入了 connectionStrings,並且我還可以確認 slowcheetah 正在正確地將配置轉換到它的生產環境中。
有沒有辦法讓 Visual Studio Publish 查看我的配置配置,並允許程式碼優先遷移?
我也遇到了同樣的問題,首先在一個單獨的項目中使用 Entity Framework 6 程式碼,而不是使用 Visual Studio 2013 Update 4 在 .net 4.5 下發布的項目,並通過 connectionStrings 的 configSource 屬性使用類似的共享方法。
我列出了這些細節,因為它會引起一場完美風暴。為了擺脫它,我遇到了一些不同的錯誤,不得不以幾種不同的方式破解它,根據EF 部落格,他們知道這是一團糟,並且正在重新考慮他們的方法。這是我能想到的最好的(這裡是龍):
發布嚮導似乎不理解 configSource,所以我從 web.config 中的 conectionStrings 中刪除了它,留下了一個空元素(您也可以完全刪除它,但我覺得現有但空的元素最好帶有註釋更合適)。為了使其在本地工作,我添加了一個連接工廠以使事情在調試模式下(本地)工作,並使發布嚮導找到數據庫遷移。我使用了工廠,因為 connectionString 總是取代工廠,我需要濫用它來使項目在任何轉換之前工作。還要確保您傳遞給 dbcontext 建構子的字元串又名“connectionStringOrDatabaseName”既是連接字元串又是數據庫名稱(使工廠生成的 db 與連接字元串 db 匹配)。
現在它找到了數據庫並且它在本地工作,但它並沒有真正使用你的 sharedConfig(因此不會總是在發佈時工作)。為了解決這個問題,我使用 web.config 轉換到 xsd:使用 configSource 替換/插入空/缺少的 connectionStrings 元素。如果您現在嘗試發布,您將遇到產生無效 connectionStrings 元素的問題。
儘管距離如此之近,但我無法直接找到/找出解決該問題的方法,因此我不得不採用另一種解決方法:我創建了一個自定義轉換,即 xsd:Import,當給定 configSource 屬性時,它會將父元素替換為父元素在另一個文件中,我將把實現作為練習留給讀者。