2013-09-21 17 views
3

我對MVC架構完全陌生,對架構有一些懷疑,他們主要是由於沒有使用實體框架,而是我一直使用數據訪問和數據表和數據集來獲取數據應用程序。我想知道有關MVC模式的最佳做法,以防某人可以用某些鏈接或pdf(無實體框架)提供幫助。還有一件事我想知道,也就是說,我們從哪裏調用從數據庫中獲取數據的DAL方法?從模型類或控制器操作?未使用實體框架的MVC架構

+3

MVC和實體框架是完全不相關的,如果你不想用,​​你不需要使用EF。對於數據訪問,您可能對Repository模式感興趣,它提供了對您通常從MVC操作調用的數據訪問對象的抽象。 –

+3

數據源訪問是從模型完成的,而不是控制器(通常是通過存儲庫模式)。 –

+0

@ChrisHardie我還沒有使用任何存儲庫模式..我得到的是一個具有某些訪問數據源和返回數據集的方法的類。我相信我需要在相關操作中調用這些方法。我對於我認爲需要探索的存儲庫模式沒有任何瞭解。謝謝! –

回答

4

這是一個如何使用MVC實現數據訪問代碼的簡短演示。請注意,數據訪問通常發生在控制器動作,而不是模型上面有人指出:

[HttpPost] 
public ActionResult Update(MyModel model){ 
    //You call your data access code here and retrieve your entity 
    DataAccessObject dao = new DataAcessObject(); 
    var entity = dao.Get(model.Id); 
    //Now that you have your entity, update its properties from the model that 
    //has been posted to this action 
    entity.Name = model.Name; 
    entity.Phone = model.Phone; 
    //Once your entity has been updated, pass it to the Update method of the DAO 
    dao.Update(entity); 
} 

有很多方法對皮膚這隻貓的事,但像上面應該給你的想法。除非你的應用程序很小,否則你應該考慮實現Repository模式來分離你的UI和數據層。

+1

實際上,數據訪問應該發生在模型中,而不是控制器,這就是模型的全部要點 –

+4

該模型的目的是表示業務領域(汽車,人員,訂單)中的某些內容。持久性不在模型的單一責任範圍之內。如果讓Visual Studio使用實體框架實體作爲其模型生成控制器,則會看到數據訪問函數駐留在「DbContext」中,而不是模型。 –

+0

或者使用Dapper,這是一個非常輕量級的裸骨骼ORM。 –

0

MVC模式很好的做法: 瀏覽次數:應該是純HTML,沒有邏輯 控制器:這是HTTP處理程序,不應該包含業務邏輯,但僅表示邏輯(IF顯示等條件)。它不知道數據來自何處或數據是如何獲得的。它只知道Model對象 Model:表示數據及其訪問。模型應該訪問數據庫並獲取數據並填充控制器可以用來傳遞給View的對象。

EntityFramework:與MVC無關,因此當您在MVC項目中使用EntityFramework時,您可能看不到以下提及的良好實踐。