這篇也是小小的紀錄文,稍微紀錄一下。
最近玩Entity Framework Code First玩得很大,而前一陣子,使用Code First的時候,要更新資料庫,卻出現Cannot attach the file的錯誤。如下圖。
Cannot attach the file 'C:\xxx專案\bin\Debug\xxx.mdf' as database 'xxxdb'.
其實Cannot attach the file的錯誤,有滿多種可能的,但這邊的情況主要是因為如下;這是這次發生問題的專案結構,小弟有分為主要的MVC專案和專門管Model的Model專案,而問題,主要是Web.config和App.config這邊。
好的,那為什麼會發生這個問題呢!!?其實很簡單,那是因為路徑上的問題與錯誤。
我們先用SSMS來看一下真正的mdf檔案在哪邊;當然,很對不起,很多東西都被反白掉了,但如果仔細看,我們可以發現mdf檔案和ldf檔案都在App_Data底下。
接下來,我們回頭看看MVC專案底下的Web.Config;是的,connectionString裡面的AttachDbFilename參數,指向的檔案位置是DataDirectory,其實這就是代表著指著專案底下的App_Data目錄;以上面的例子來說,就是MVC專案底下的App_Data目錄。
但實際上,當我們下達Updata-database指令的時候,卻是針對Model專案,如下圖。
那我們看一下Model底下的App.config,可以發現,也有AttachDbFilename的參數,而且也是指向著App_Data目錄,但其實我們真正的資料庫卻是在MVC專案的App_Data目錄阿!!
是的,所以當Updata-Database的時候,就會發生這種錯誤,因為資料庫的檔案,實際上根本就不存在Model專案的App_Data目錄下~~
所以解決的方式很簡單,我們只要把Model專案的App.config的ConnectionString的AttachDbFilename拿掉,就可以了,如下圖。
這樣在一次的updata-database就不會有問題了。