2013/11/19

[筆記] ASP.NET MVC 將 Model 獨立成一個專案 (使用EntityFramework)

會想這樣嘗試只是想試試看到底能不能切開,真的要切開應該是搭配 ASP.NET MVC API專案才是

切出來變成類別庫專案只是讓 model 變成一顆 dll,讓東西發佈出去之後別人看不到 DAL 層的運作方式.... 吧 (我知道有反組譯工具~)

環境是 Windows 8.1, Visual Studio 2012 , .NetFramework 4.5




  1. 開新MVC專案
  2. 新增方案,選 Windows 類別庫專案
    如果是開發階段把 db 的 mdf 檔丟在 MVC 的 App_Data 下的話需多加幾步:
    1. 於 mvc 專案下的 App_Data 新增 mdf 資料庫檔
    2. 在類別庫專案內加入現有項目,選到mvc專案下的mdf檔之後對加入旁邊的 v 點一下選"加入作為連結"
    3. 會問你要不要設定資料來源組態,選實體資料模型
      (但這樣模型名稱就是預設的Model1,也可以不做這步跳出去外面從3繼續往下走)
    4. 繼續下一步,會問你"您選取的連接使用不在目前專案中的區域資料庫檔案,是否複製到專案並修改連線" 選否,接著就可以繼續跳到外面的步驟 5 了
  3. 於類別庫專案中新增 ADO.NET 實體資料模型
  4. 然後照著精靈走完所有的設定連線字串流程,這邊來選個 AdvantureWorks, 選 HumanResource 這個 shcema name下的所有 table
  5. 點到 edmx 檔上打開屬性(F4),對中繼資料成品處理選,內嵌在輸出組件中(似乎預設就是~)
  6. 在 MVC 專案中參考類別庫專案,完成後F5按下去建置讓 MVC 認得類別庫
  7. 會發現新增控制器時已經可以看到類別庫專案的連線,選好模型類別跟資料內容類別
  8. 無法擷取 'XXXX' 的中繼資料。No connection string named 'xxxConn' could be found in the application config file.  因為MVC專案雖然參考了類別庫但沒有設定連線字串啦~
  9. 這時取消來設定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=&quot;data source=.\SQLEXPRESS;initial catalog=AdventureWorks2012;user id=$$$;password=$$$;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

  10. 走到這邊就可以很自在的新增 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=&quot;data source=.\SQLEXPRESS;initial catalog=AdventureWorks2012;user id=$$$;password=$$$;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />



很怪的是剛開始在設定的時候直接貼都會提示連線字串要用 ~ ,後來就都試不出來了

而且一開始連線字串貼到 Web.Config 內用 * 時會死,要改成 Model 專案,名稱才可以正確新增 Controller,後來全部重走一次也都沒在發生一樣的問題了 0rz

沒有留言:

張貼留言