Entity Framework - 出現Cannot attach the file錯誤

29 May 2013 — Written by Sky Chang
#ASP.NET MVC#Entity Framework#SQL Server

這篇也是小小的紀錄文,稍微紀錄一下。

最近玩Entity Framework Code First玩得很大,而前一陣子,使用Code First的時候,要更新資料庫,卻出現Cannot attach the file的錯誤。如下圖。

image

Cannot attach the file 'C:\xxx專案\bin\Debug\xxx.mdf' as database 'xxxdb'.

其實Cannot attach the file的錯誤,有滿多種可能的,但這邊的情況主要是因為如下;這是這次發生問題的專案結構,小弟有分為主要的MVC專案和專門管Model的Model專案,而問題,主要是Web.config和App.config這邊。

image

好的,那為什麼會發生這個問題呢!!?其實很簡單,那是因為路徑上的問題與錯誤。

我們先用SSMS來看一下真正的mdf檔案在哪邊;當然,很對不起,很多東西都被反白掉了,但如果仔細看,我們可以發現mdf檔案和ldf檔案都在App_Data底下。

image

接下來,我們回頭看看MVC專案底下的Web.Config;是的,connectionString裡面的AttachDbFilename參數,指向的檔案位置是DataDirectory,其實這就是代表著指著專案底下的AppData目錄;以上面的例子來說,就是MVC專案底下的AppData目錄。

image

但實際上,當我們下達Updata-database指令的時候,卻是針對Model專案,如下圖。

image

那我們看一下Model底下的App.config,可以發現,也有AttachDbFilename的參數,而且也是指向著AppData目錄,但其實我們真正的資料庫卻是在MVC專案的AppData目錄阿!!

是的,所以當Updata-Database的時候,就會發生這種錯誤,因為資料庫的檔案,實際上根本就不存在Model專案的App_Data目錄下~~

所以解決的方式很簡單,我們只要把Model專案的App.config的ConnectionString的AttachDbFilename拿掉,就可以了,如下圖。

image

這樣在一次的updata-database就不會有問題了。

Sky & Study4.TW