首先,讓研究擺脫困境。我已經在這裏看到並應用了這個問題的答案:Web Deploy/Publish is adding a unknown connection string?Web部署添加額外的連接字符串(兩次添加相同的連接)
它不起作用,我的意思是,它對我面臨的問題沒有任何影響。
另一個可能有用的信息是我正在使用Visual Studio 2015 Enterprise。
好吧,現在我面臨的問題是一個奇怪的問題。我在我的web.config
文件中有兩個數據庫連接。他們是這樣定義的:
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\Test.mdf;Initial Catalog=Test;Integrated Security=True" providerName="System.Data.SqlClient" />
<add name="ErpConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\Test.mdf;Initial Catalog=Test;Integrated Security=True" providerName="System.Data.SqlClient" />
與DefaultConnection
相關的背景是ApplicationDbContext
。與ErpConnection
相關的上下文是ErpEntityContext
。這些每一個被定義是這樣的:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("name=DefaultConnection")
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
和:
public class ErpEntityContext : DbContext
{
public ErpEntityContext()
: base("ErpConnection")
{
}
}
然而,網絡部署決定ApplicationDbContext
和DefaultConnection
必須是兩個完全不同的東西,所以最終顯示他們像在兩種不同的連接下圖:
從卸下襬脫了雙重入口(這顯然不是解決方案,因爲我想讓我的連接字符串)。更改連接字符串的名稱完全不重要。這也不會發生在ErpConnection
。
這發生在Visual Studio的一個會話到另一個會話,並且昨天從無處出現。然後幾個小時後,當我重新啓動VS時,它會自動消失。我認爲它是固定的,一切都很華麗,但今天它又重新出現了。我完全失去了這裏可能會出錯的地方。儘管我對解決方案感興趣,但如果有人能告訴我爲什麼會發生這種情況,我也會很感激。
編輯:
爲了澄清和回答在評論中提出的問題,我沒有指定的任何轉換,問題出現在所有生成配置。
此外,我試圖發佈與Remove additional files at destination
選中和未選中。同樣,我試圖發佈與Exclude files from the App_Data folder
檢查和取消選中,看看我是否可以愚弄的東西(:))。但迄今爲止無濟於事。
UPDATE:
問題的進一步調查發現,罪魁禍首可能是DbConfiguration
使用Loaded
事件:
Loaded += (sender, args) => args.ReplaceService<DbProviderServices>((s, _) => new CachingProviderServices(s, transactionHelper, new ExampleCachingPolicy()));
此事件的文件說:
構建DbConfiguration後,在EF初始化期間發生 構造編輯,但就在它被鎖定準備使用之前。使用此事件 檢查和/或覆蓋在配置鎖定之前已註冊的服務 。請注意,此事件應謹慎使用 ,因爲它可能會阻止工具發現在運行時使用的相同 配置。
問題是如果需要使用此事件,修復將會是什麼。如果我找到一個答案,我會寫一個答案,但如果有其他人知道,請隨時這樣做。
您的意圖是兩個連接字符串是否相同?另外,你有沒有指定任何轉換(你可以擴展你的.config文件,看到子節點)?最後,這個問題是否適用於所有構建配置,只是調試等? – Basic
@Basic是的,這是正確的。但是,將這些字符串更改爲不同的結果具有相同的結果。一個連接會顯示兩次,並在發佈時出現混亂。 –
@基本感謝您的提問,我更新了問題以澄清情況。但總而言之,沒有任何改變,並且在所有情況下都會發生。 –