none
ef core 新增資料如何多筆儲存 RRS feed

  • 問題

  • [HttpPost]
            [ValidateAntiForgeryToken]
            public async Task<IActionResult> Create([Bind("Name,CategoryID,ManuFactorID,BatchNumberID,PartNumber,WareHouseID,TotalNumber")] Product product)
            {
                
                if (Request.Form["chk"] == "1")//如有勾選多筆新增
                {
                    for (int i = 0; i < product.TotalNumber; i++)
                    {
                        if (ModelState.IsValid)
                        {
                            _context.Add(product);
                            await _context.SaveChangesAsync();
                            product.PartNumber += 1;   //號碼加1
                        }
                    }
                    return RedirectToAction(nameof(Index));
                }
                else
                {
                    if (ModelState.IsValid)
                    {
                        _context.Add(product);
                        await _context.SaveChangesAsync();
                        return RedirectToAction(nameof(Index));
                    }
                }
                
                ViewData["BatchNumberID"] = new SelectList(_context.BatchNumbers, "ID", "BatchNum", product.BatchNumberID);
                ViewData["ManuFactorID"] = new SelectList(_context.ManuFactors, "ID", "Name", product.ManuFactorID);
                ViewData["WareHouseID"] = new SelectList(_context.WareHouses, "ID", "Name", product.WareHouseID);
                ViewData["CategoryID"] = new SelectList(_context.Categories, "ID", "Name", product.CategoryID);
                return View(product);
            }

    我想要在我勾選chk這個checkbox的時候

    根據我輸入的totalnumber來新增資料進sql

    單筆資料都可以新增進去

    可是一旦一次新增2筆資料資料時就會發生問題

    爬文說是ID問題

    我的ID是auto increase 我也沒有傳遞id進去

    我完全不知道到底是哪裡的問題

    請各位大神指點一下小弟的程式碼哪裡出錯了


    2018年3月26日 上午 08:57

解答

  • 你的 Method 只有傳進一個 Product class 的 instance , 然後你用迴圈一直加同一個 Product instance, 好像不太對勁。你如果要多重新增, 這些 instances 不應該是同一個。

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2018年3月27日 下午 04:54

所有回覆

  • 從錯誤訊息來看, 是說您不應該給auto increase欄位內容值, 如果auto increase欄位是CategoryID, 您可以把Bind改成這樣再試看看(去掉CategoryID):

    ([Bind("Name,ManuFactorID,BatchNumberID,PartNumber,WareHouseID,TotalNumber")] Product product)
    {
    }

    2018年3月27日 上午 12:32
  • 抱歉忘記說明 主鍵是productID

    本來BIND裡面有她

    後來沒用我就把它去掉了

    2018年3月27日 上午 11:32
  • 你的 Method 只有傳進一個 Product class 的 instance , 然後你用迴圈一直加同一個 Product instance, 好像不太對勁。你如果要多重新增, 這些 instances 不應該是同一個。

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2018年3月27日 下午 04:54
  • 請問要怎麼樣才能多重新增呢?

    我找了很久還是找不到解決辦法

    2018年3月28日 下午 12:19
  • 我找到方法了 感謝大大指點迷津
    2018年3月28日 下午 12:32