假設我們有class PersonModel
,用戶在瀏覽器中編輯了一個詳細表單,並點擊了submit
按鈕。ASP.NET MVC3僅更新必需字段
如何寫一個控制器邏輯來創建UPDATE SqlComand
(無EF)和更新僅那些字段的從class PersonModel
(FirstName, LastName, Age...
),其已被更改。 /Person/Edit/<id>
控制器應該是什麼參數?
假設我們有class PersonModel
,用戶在瀏覽器中編輯了一個詳細表單,並點擊了submit
按鈕。ASP.NET MVC3僅更新必需字段
如何寫一個控制器邏輯來創建UPDATE SqlComand
(無EF)和更新僅那些字段的從class PersonModel
(FirstName, LastName, Age...
),其已被更改。 /Person/Edit/<id>
控制器應該是什麼參數?
你不會對你的MVC代碼做任何特殊的事情,也不會添加任何特殊的URL參數。
如果您只想更新更改的字段,則必須編寫大量代碼。您必須獲取當前記錄,將每個模型字段與記錄字段進行比較,找出哪些字段已更改,然後必須根據更改的字段構建SQL語句,然後更新它,確保使用optomistic記錄鎖定以確保當您檢索它時和更新它時,字段沒有發生變化。
這可能是幾百行代碼。或者,如果您使用ORM,它可能是一行代碼。另外,請記住,您還需要使用參數化語句,以確保不會發生SQL注入攻擊(您在ORM中免費獲得的東西)。
祝你好運,我當然不會寫它。
您可以使用Linq並讓datacontext爲您做所有事情。 在模型中,您只需使用linq查詢創建數據類,獲取更新,檢索對象,設置從您檢索的對象中視圖傳遞的所有值(無論如何您必須這樣做,因爲該模式將視圖從模型中分離出來|還記得,MVC實現了讓觀察者瞭解模型中的變化的觀察者,因此您無法知道視圖中從控制器中修改了什麼),然後致電DataContext.SubmitChanges();方法。數據上下文將自己完成這項工作。它會知道要更改和修改哪些內容,並且會提供最高性能的查詢。
他說他沒有使用實體框架(我假設沒有其他類型的ORM),他想用SqlCommand生成SQL語句。 –
Linq不是EF! – JuanC
同樣Linq!= Linq到Sql – thiagoleite
我想說的是,你不使用廣義PersonModel,我認爲這是你的數據模型的1:1表示。你應該創建一個只有你關心的領域的淡化視圖模型。然後使用類似AutoMapper的東西將ViewModel映射回您的DomainModel。
以下是有關如何在這種情況下使用AutoMapper的參考。
爲什麼不使用ORM?這在當今時代是愚蠢的,因爲它爲你處理所有這些。你可能會開始一個項目,認爲一個ORM是矯枉過正的,然後隨着它的發展,你最終會以這種方式寫更多的代碼。 –