切出來變成類別庫專案只是讓 model 變成一顆 dll,讓東西發佈出去之後別人看不到 DAL 層的運作方式.... 吧 (我知道有反組譯工具~)
環境是 Windows 8.1, Visual Studio 2012 , .NetFramework 4.5
- 開新MVC專案
- 新增方案,選 Windows 類別庫專案
如果是開發階段把 db 的 mdf 檔丟在 MVC 的 App_Data 下的話需多加幾步: - 於 mvc 專案下的 App_Data 新增 mdf 資料庫檔
- 在類別庫專案內加入現有項目,選到mvc專案下的mdf檔之後對加入旁邊的 v 點一下選"加入作為連結"
- 會問你要不要設定資料來源組態,選實體資料模型
(但這樣模型名稱就是預設的Model1,也可以不做這步跳出去外面從3繼續往下走) - 繼續下一步,會問你"您選取的連接使用不在目前專案中的區域資料庫檔案,是否複製到專案並修改連線" 選否,接著就可以繼續跳到外面的步驟 5 了
- 於類別庫專案中新增 ADO.NET 實體資料模型
- 然後照著精靈走完所有的設定連線字串流程,這邊來選個 AdvantureWorks, 選 HumanResource 這個 shcema name下的所有 table
- 點到 edmx 檔上打開屬性(F4),對中繼資料成品處理選,內嵌在輸出組件中(似乎預設就是~)
- 在 MVC 專案中參考類別庫專案,完成後F5按下去建置讓 MVC 認得類別庫
- 會發現新增控制器時已經可以看到類別庫專案的連線,選好模型類別跟資料內容類別
- 無法擷取 'XXXX' 的中繼資料。No connection string named 'xxxConn' could be found in the application config file. 因為MVC專案雖然參考了類別庫但沒有設定連線字串啦~
- 這時取消來設定Web.Config 的連線設定,把類別庫專案內 App.Config 的連線字串copy過去,
<add name="advWorksConn" connectionString="metadata=res://*/advWorksdb.csdl|res://*/advWorksdb.ssdl|res://*/advWorksdb.msl;provider=System.Data.SqlClient;provider connection string="data source=.\SQLEXPRESS;initial catalog=AdventureWorks2012;user id=$$$;password=$$$;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /> - 走到這邊就可以很自在的新增 Controller 了,如果連線字串copy過去之後重新建立 controller 還是不行的話,要把連線字串內的 * 改成類別庫專案的名稱來正確參考到那顆.dll
<add name="advWorksConn" connectionString="metadata=res://AdvWorks.Model/advWorksdb.csdl|res://AdvWorks.Model/advWorksdb.ssdl|res://AdvWorks.Model/advWorksdb.msl;provider=System.Data.SqlClient;provider connection string="data source=.\SQLEXPRESS;initial catalog=AdventureWorks2012;user id=$$$;password=$$$;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
很怪的是剛開始在設定的時候直接貼都會提示連線字串要用 ~ ,後來就都試不出來了
而且一開始連線字串貼到 Web.Config 內用 * 時會死,要改成 Model 專案,名稱才可以正確新增 Controller,後來全部重走一次也都沒在發生一樣的問題了 0rz
沒有留言:
張貼留言