iT邦幫忙

0

如何攔截 db.savechanges()

你好,請問一下使用ASP.NET MVC 實作購物網站 (十) - 資料驗證
//儲存異動資料
db.SaveChanges;
//設定成功訊息
會跑出這個 好像攔截不到

石頭 iT邦高手 1 級 ‧ 2017-07-02 07:27:01 檢舉
攔截不到是什麼意思?
trt0425 iT邦新手 5 級 ‧ 2017-07-02 12:46:33 檢舉
你好,小弟不才,在練習做這邊MVC的
Create 的地方 如果有必要的地方沒填他不會跑去SAVE這
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
小魚
iT邦大師 1 級 ‧ 2017-07-02 07:36:11
最佳解答

那是Entity的語法,
不過我看範例好像是 db.SaveChanges(); 不是 db.SaveChanges;
這個方法我是沒看過,
之前有交接過別人的Entity是用Create(model)和Update(model)的方式,
我自己是沒在用Entity,畢竟效率比較差,
語法是比較簡單不過限制較多,而且效率比較差,
之前有改過別人的Entity,加上有點複雜的運算,
原本需要好幾分鐘才跑完有時候程式還會當,
我改完之後幾秒鐘就跑出結果了。

看更多先前的回應...收起先前的回應...
小魚 iT邦大師 1 級 ‧ 2017-07-02 08:45:16 檢舉

話說回來,如果程式可以執行,可是沒有跑到這裡,那是不是表示這個函式根本沒有被執行到?

trt0425 iT邦新手 5 級 ‧ 2017-07-02 12:50:56 檢舉

小魚
大大你好 db.SaveChanges();這段小弟我的也是這樣 手殘沒複製好QQ
我用IF去做判斷,如果必要欄位為null,就不會跑db.SaveChanges()。
但執行結果就像上面的結果一樣

小魚 iT邦大師 1 級 ‧ 2017-07-02 19:20:01 檢舉

你這樣講我還是聽不懂,
所以問題解決了嗎?
如果沒解決是卡在什麼地方?
如果還有問題你可能要PO一下完整的程式碼了

trt0425 iT邦新手 5 級 ‧ 2017-07-02 19:37:35 檢舉
    public ActionResult Create(Models.Product postback)
    {
        if(this.ModelState.IsValid)
        { 
            using (Models.CartsEntities db = new Models.CartsEntities())
                {
                db.Products.Add(postback);

                db.SaveChanges();

                TempData["ResultMessage"] = String.Format("商品[{0}]建立成功", postback.Name);

                return RedirectToAction("Index");
                }
        }
        
        ViewBag.ResultMessage = "資料有誤";

        return View("postback");
        
    }
trt0425 iT邦新手 5 級 ‧ 2017-07-02 19:39:05 檢舉
小魚 iT邦大師 1 級 ‧ 2017-07-02 20:05:13 檢舉

我知道,
那個網站我有實作過,
只是我沒有用Entity這個部分,
請問你有下過斷點,
看程式跑到什麼地方,
(甚至我懷疑根本沒跑到Create函式裡面)

trt0425 iT邦新手 5 級 ‧ 2017-07-02 20:54:36 檢舉

小魚
我 Create 可以新增
可是 我故意要少輸入幾個必要輸入項目
他就會跑出錯誤 db.SaveChanges();

不會在BOX底下顯示

小魚 iT邦大師 1 級 ‧ 2017-07-02 21:18:24 檢舉

我整理一下你所說的,
你一個一個回答吧,
1.你意思是說如果全部都正常輸入,是可以新增的?
2.可是如果你少輸入幾個,會出現錯誤?
3.錯誤出現後,資料庫裡面資料會變嗎?
4.少輸入的是什麼樣的欄位?(如int或string或...)
5.你跑出的錯誤是什麼樣的錯誤?

trt0425 iT邦新手 5 級 ‧ 2017-07-02 21:42:40 檢舉

小魚
1.是的,SQL也會新增
2.對,我是故意在Create幾個欄位沒給他值
但我寫的IF預計 欄位下面會出現說請輸入值之類的
3.SQL不會新增成功
4.欄位值在SQL設定為不可為NULL int,string都有
http://ithelp.ithome.com.tw/upload/images/20170702/20106127DgLxDIDdkK.jpg
5.
http://ithelp.ithome.com.tw/upload/images/20170702/20106127KMHVjIG20I.jpg

小魚 iT邦大師 1 級 ‧ 2017-07-02 22:53:34 檢舉

因為欄位值設定不可為null,但是你卻傳給他null,所以會出錯吧,
印象中Entity的變數應該是int?之類的,所以是允許null的,
一般會先在前端用JavaScript判斷欄位,
後端這邊你可以用try catch包起來,如果成功就轉到原來的頁面,
如果失敗就將model傳回編輯頁面,並顯示錯誤訊息,
(錯誤訊息通常是顯示給使用者看的錯誤訊息,
程式的錯誤訊息一般是記在Log裡面)
不過最好是可以去判斷每個欄位,如果是null就給他一個預設值,
方法很多的,自己想一想吧。

小魚 iT邦大師 1 級 ‧ 2017-07-03 12:05:16 檢舉

順帶一提,那個範例只是提供基本的功能而已,
如果你要防呆,或是一些進階的功能,
很多東西都要自己加。

trt0425 iT邦新手 5 級 ‧ 2017-07-14 16:10:56 檢舉

小魚
小弟這幾天,有找到問題 我沒有把SQL路徑設定好
不好意思,這麼晚回覆你。 感謝你得解答

我要發表回答

立即登入回答