2015-12-05

「初始化字串的格式和開始於索引 0 的規格不相符的」問題

「初始化字串的格式和開始於索引 0 的規格不相符」

「Format of the initialization string does not conform to specification starting at index 0」


相信使用Entity Framework Code-First的開發者一定有人遇過,在本機開發環境做了Add-Migration XXX和Update-Database之後看起來都沒問題,發佈設定檔裡面也勾了啟用Code-First移轉,然後發佈到遠端主機上,開心的期盼.Net會自動更新資料庫,結果總是出現這個錯誤...



教學書裡不會告訴你可能會有這個問題,也不會跟你講設定發佈時所要注意的重點可是偏偏就是會遇到,而且死都找不出問題在哪!教學裡對發佈的步驟總是草草帶過,只會介紹基本設定,而不會提供太多細節,但發佈卻也是最重要的事,牽扯到上線後的網站能不能正常啊...


一般我們會如下設定:

使用Code-First,在發佈設定檔會將紅圈處的框框打勾(如下)


然後Visual Studio會自動在發佈後轉換遠端主機上的web.config,加入Migration移轉的設定,我們來看看下圖,是預設發佈後遠端主機上的web.config:

紅框處就是自動加上的,會多個名為「原本連線字串名稱_DatabasePublish」的連線字串設定,乍看之下好像都沒問題,原本我也以為connectionString裡面那樣就會自動轉換,好聰明...

結果問題就是出在這!根本不會幫你轉換!!連不到資料庫,就出現錯誤了!

我們只要把connectionString裡面那段文字改成上面真正的連線字串,問題就解決了...


簡單吧?但找出問題點實在是毫無頭緒啊....從很久之前用過Code-First移轉發佈就有這個問題了,當時只是因為在測試,資料也不是正式的所以刪掉沒差就沒理他。想不到到今天還是沒解決...

但為了證實是否是bug還是其他問題,再在繼續研究下,發現發佈設定連線字串那邊,只要把使用Code-First的DbContext的文字框內,放入真正的ConnectionString,配合使用Code-First移轉勾選,發佈過去的Code-First移轉連線字串就會正常了!



這個小地方是幾乎所有發佈教學裡不會告訴你的事...多的是,你不知道的事~~

而因為每個發佈環境我有自己的web.xxx.config,會自動轉換ConnectinoString,所以「在執行階段使用此連線字串(更新目標web.config)」我就沒有勾了。


希望這篇文章能幫助到有同樣問題的朋友們~