none
有關MVC Model Binding RRS feed

  • 問題

  • 各位大大 您好:

    小弟是mvc 初學者

    最近試著將 webform 改成 mvc 架構,拿訊息發佈來做第一個測試

    透過 ADO.NET Entity Data Model 產生 edmx

    public partial class News
        {
            public int NewsNo { get; set; }
            public string NewsTitle { get; set; }
            public string NewsExpireDate { get; set; }
            public string NewsContent { get; set; }
            public Nullable<System.DateTime> NewsLoginTime { get; set; }
            public string NewsAttachment { get; set; }

    小弟遇到問題

    1. NewsNo 欄位在 db 為自動編號,發現在 Create 會發生錯誤,但在db 自動編號拿掉,Create就正常了,如何避免此錯誤?

    2.使用者可以編修「NewsTitle」及「NewsContent」,使用 db.savechange() 好像是全部欄位 做更新,如何針對特定欄位更新呢?

    3.在webform 使用 dataset 取得資料,datatable可轉換 IEnumerable ,各位大大是否建議在mvc 使用 dataset來撈資料?



    2013年3月20日 上午 07:46

解答

  • 1. NewsNo 欄位在 db 為自動編號,發現在 Create 會發生錯誤,但在db 自動編號拿掉,Create就正常了,如何避免此錯誤?
    請參考以下連結的說明:
    The bug in StoreGeneratedPattern fixed in VS 2010 SP1 | Code through the pain
    http://www.ladislavmrnka.com/2011/03/the-bug-in-storegeneratedpattern-fixed-in-vs-2010-sp1/


    2.使用者可以編修「NewsTitle」及「NewsContent」,使用 db.savechange() 好像是全部欄位 做更新,如何針對特定欄位更新呢?
    因為是整個物件的資料由 EF 轉為 SQL 後再到 DB 去執行,無法針對特定欄位去做更新。


    3.在webform 使用 dataset 取得資料,datatable可轉換 IEnumerable ,各位大大是否建議在mvc 使用 dataset來撈資料?
    ASP.NET MVC 強調使用強型別的資料,DataSet 或 DateTable 都是弱型別資料集合,
    建議不要直接拿來使用在 Controller 或 View 裡,因為 ASP.NET MVC 強調物件導向的觀念,
    所以在存取資料都是以「物件」為操作對象,在程式裡操作資料時會更加方便與快速,而且強型別所以就無需多花時間去做型別轉換,
    如果避免不了而一定會在 MVC 專案中使用 DataSet 等弱型別資料集合時,我會建議另外再做 DTO 類別來轉換,
    這樣就可以不用在 Controller or View 甚至於 Model 裡去直接與弱型別資料打交道。

    mrkt的程式學習筆記 http://kevintsengtw.blogspot.com (ASP.NET MVC - twMVC)

    • 已標示為解答 順其自然 2013年3月20日 下午 02:56
    2013年3月20日 上午 08:45

所有回覆

  • 1. 請參考 System.ComponentModel.DataAnnotations --> 請以mrkt_kevin的方法修正。

    2. 請參考 ADO.NET Entity Framework

    3. 在MVC的Model可以與多種資料存取技術配合,ADO.NET也是可以,但比較好是用Entity Framework。

    使用MVC不要去想太多 webform 的事。


    理直氣和,切記。

    Blog: http://blog.kkbruce.net

    Book:《ASP.NET MVC 4 網站開發美學》,2/7號正式上市


    • 已編輯 KKBruceMVP 2013年3月20日 上午 09:28 更好的答案
    2013年3月20日 上午 08:35
  • 1. NewsNo 欄位在 db 為自動編號,發現在 Create 會發生錯誤,但在db 自動編號拿掉,Create就正常了,如何避免此錯誤?
    請參考以下連結的說明:
    The bug in StoreGeneratedPattern fixed in VS 2010 SP1 | Code through the pain
    http://www.ladislavmrnka.com/2011/03/the-bug-in-storegeneratedpattern-fixed-in-vs-2010-sp1/


    2.使用者可以編修「NewsTitle」及「NewsContent」,使用 db.savechange() 好像是全部欄位 做更新,如何針對特定欄位更新呢?
    因為是整個物件的資料由 EF 轉為 SQL 後再到 DB 去執行,無法針對特定欄位去做更新。


    3.在webform 使用 dataset 取得資料,datatable可轉換 IEnumerable ,各位大大是否建議在mvc 使用 dataset來撈資料?
    ASP.NET MVC 強調使用強型別的資料,DataSet 或 DateTable 都是弱型別資料集合,
    建議不要直接拿來使用在 Controller 或 View 裡,因為 ASP.NET MVC 強調物件導向的觀念,
    所以在存取資料都是以「物件」為操作對象,在程式裡操作資料時會更加方便與快速,而且強型別所以就無需多花時間去做型別轉換,
    如果避免不了而一定會在 MVC 專案中使用 DataSet 等弱型別資料集合時,我會建議另外再做 DTO 類別來轉換,
    這樣就可以不用在 Controller or View 甚至於 Model 裡去直接與弱型別資料打交道。

    mrkt的程式學習筆記 http://kevintsengtw.blogspot.com (ASP.NET MVC - twMVC)

    • 已標示為解答 順其自然 2013年3月20日 下午 02:56
    2013年3月20日 上午 08:45