asp.net mvc 4 模型層為什麼可以通過簡單的 {get;set}就可以對數據進行設置和取得 這其中的實現原理是什麼?
01-13
在學習mvc4 的過程中 發現例子的模型層 只寫了{get;set}就可以進行數據的訪問和寫入,請問這個的原理是什麼。他會最終被翻譯成sql語句嗎?
跟MVC沒有關係,根據你的描述應當是EF的實體追蹤乾的事情。
事實上EF也不會自動的把數據保存到資料庫去,實體追蹤乾的事情僅僅只是檢測實體中的哪些屬性被修改了。
只有當調用SaveChanges方法的時候,才會產生SQL並保存到資料庫。
事實上這個裡面只有實體追蹤是新的技術,因為http://ADO.NET的DataTable早就支持修改DataTable然後用DataAdapter跟資料庫同步了,而實體追蹤提供的能力是可以直接修改實體而不是DataRow。不清楚你使用的是哪個例子項目。
簡單來說,是的,由 EntityFramework 為你自動接管了數據操作過程,使你將精力集中於你自己的業務邏輯,而不是繁鎖而乏味的數據層。它會根據你項目的具體情況自動生成數據與內存模型的對應關係,並在運行時動態地將程序指令轉換為合適的 SQL 語句來操作資料庫。
LINQ 的思路是將查詢集成到語言中,這樣「數據」與「集合」變得可以一起理解了。藉助於它,我們可以對包括資料庫、XML、內存集合等大量的數據源進行統一的操作。EntityFramework 本身有著很強的自動映射能力,針對 LINQ to SQL 做了大量優化。同時,它還支持 Database First、Model First 和 Code First 等多種開發方式,可以說極大地滿足了不同項目形態的數據需求。更有意思的是,這一切搞定之後,你甚至還不知道它的存在。這個不是MVC特有的,他是C#的自動完成屬性,他背後其實隱藏了繁瑣的get/set方法來讀寫一個欄位,使用起來很方便。但是他卻是一個有爭議的方案,因為他隱藏了方法對欄位的操作,讓人感覺到屬性就是欄位。但是使用起來很方便不是嗎?一看就造是其他語言轉過來的,嘿嘿,慢慢體會吧…
這個跟mvc沒有關係,不管在B/S 還是C/S 都可以使用,因為他是C#的自動完成屬性private string name;
public string Name
{ get{return name;} set{ name=value;}}以前的代碼是這樣的寫的,當然在get和set中還可以做判斷
推薦閱讀:
※MVC和三層架構有何區別和聯繫?
※你對MVC、MVP、MVVM 三種組合模式分別有什麼樣的理解?
※AngularJS 沒有元素選擇器算不算一個缺點?
※Backbone.js 的最佳應用場景有哪些?