2016-04-16 182 views
0

我已經開始學習Asp.net最後一個弱點(我沒有任何以前的.net經驗),但是我在更新數據庫記錄時遇到了一些麻煩。Entity FrameWork更新記錄7.新記錄更新

我只見過一個類似的問題(How to update record using Entity Framework 7?),但它沒有使用窗體或控制器,所以它沒有太大的幫助。

我有一個對象

namespace Daycare.Models 
{ 
    public class Question 
    { 
     public Question() { 

     } 

     public int id { get; set; } 
     public string title { get;set;} 

     public string question { get; set; } 

     public string answer { get; set; } 
     public DateTime date { get; set; } 
    } 
} 

控制器和自動生成的景色。

刪除並創建工作正常,但編輯方法只創建新的空對象。

 public IActionResult Edit(int? id) 
    { 
     if (id == null) 
     { 
      return HttpNotFound(); 
     } 

     Question question = _context.questions.Single(m => m.id == id); 
     if (question == null) 
     { 
      return HttpNotFound(); 
     } 
     return View(question); 
    } 

    // POST: Questions/Edit/5 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public IActionResult Edit(Question question) 
    { 
     if (ModelState.IsValid) 
     { 
//stuff i've tried. 
     // _context.questions.Update(question); 

       _context.Update(question); 
    //   _context.Entry(question).State = EntityState.Modified; 
      _context.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     return View(question); 
    } 

這是形式

<form asp-action="Edit"> 
 
    <div class="form-horizontal"> 
 
     <h4>Question</h4> 
 
     <hr /> 
 
     <div asp-validation-summary="ValidationSummary.ModelOnly" class="text-danger"></div> 
 
     <input type="hidden" asp-for="id" /> 
 
     <div class="form-group"> 
 
      <label asp-for="question" class="col-md-2 control-label"></label> 
 
      <div class="col-md-10"> 
 
       <input asp-for="question" class="form-control" /> 
 
       <span asp-validation-for="question" class="text-danger" /> 
 
      </div> 
 
     </div> 
 
     <div class="form-group"> 
 
      <label asp-for="title" class="col-md-2 control-label"></label> 
 
      <div class="col-md-10"> 
 
       <input asp-for="title" class="form-control" /> 
 
       <span asp-validation-for="title" class="text-danger" /> 
 
      </div> 
 
     </div> 
 
     <div class="form-group"> 
 
      <div class="col-md-offset-2 col-md-10"> 
 
       <input type="submit" value="Save" class="btn btn-default" /> 
 
      </div> 
 
     </div> 
 
    </div> 
 
</form>

我將不勝感激任何幫助。

非常感謝提前。

+0

'詢問Q = new Question(); int b = integer(question.id); int _a = 5007; q.id = _a; _context.questions.Attach(question); _context.Entry(question).State = EntityState.Modified; _context.SaveChangesAsync(); ' 這似乎是工作,但我得到一個錯誤時, _A = question.id – Greenmachine

回答

1

在所有的輸入中,您只需指定名稱和id屬性以及相應的問題類的匹配屬性。

OR 或者您可以使用的HtmlHelper輸入,標籤... 輸入文本

@Html.EditorFor(model => model.title) 

輸入標籤

@Html.LabelFor(model => model.title) 

所以燒製提交和呼叫時的問題類取值編輯方法。

//_context.Update(question); //instead of this you can use 

_context.Entry(question).State = EntityState.Modified; 
_context.SaveChanges(); 
+0

對不起,但我還沒有完全明白指定的部分。 你能否提供一個例子? – Greenmachine

+0

這似乎是工作,但當我設置q.id =問題編號 我得到 - InvalidOperationException:實體類型'問題'上的屬性'id'具有臨時值,而試圖將實體的狀態更改爲'修改'。 問題q =新問題(); q.id = 5007; q。問題=「它會工作」; _context.questions.Attach(q); _context.Entry(q).State = EntityState.Modified; _context.SaveChangesAsync(); return RedirectToAction(「Index」); – Greenmachine

+1

你可以得到編輯問題id來改變視圖中的代碼而不是** **設置爲** **或者你可以像** @ HiddenFor(model => model.Id)那樣使用html helper **所以當Edit被激發時,它會從question模型。 –

1

嘗試取消註釋線

_context.Entry(question).State = EntityState.Modified; 

這條線的力實體框架來將對象標記爲修改,並且將所述的SaveChanges期間運行在物體上的更新命令()調用

+0

Thabk您的回覆, 我試圖將實體的狀態更改爲'修改'時出現錯誤臨時值。 如果我設置一個靜態值的Id - 它的作品。示例 問題q =新問題(); int _a = 5007; q.id = _a; IF q,id = question.id - 錯誤。 如果ID保持不變,我會得到上述錯誤。 – Greenmachine