我一直在遍地搜索,發現很多問題,但他們都沒有回答我的問題。EF將孩子插入特定的父母
一點我試圖做的是簡單的,讓我們說我們有這樣的事情:
public class Parent
{
public int ID { get; set; }
public List<Child> Children { get; set; }
}
public class Child
{
public int ID { get; set; }
public int ParentID { get; set; }
public Parent Parent { get; set; }
}
EF負責創建數據庫的關懷,並通過腳手架,我得到的控制器和視圖。一切工作正常,我可以創建父。我也可以從下拉列表中選擇帶有ParentID的Child。
我真正想要做的是去除下拉,並通過PARENTID作爲參數那樣:
public IActionResult Create(int id)
{
if (id == 0)
{
return NotFound();
}
ViewData["ID"] = id; //that a ParentID
return View();
}
,並鑑於我們拿到的這款:
<form asp-action="Create">
<div class="form-horizontal">
<h4>Child</h4>
<hr />
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="ParentID" [email protected]["ID"] />
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
</form>
在提交本我「不能當IDENTITY_INSERT設置爲OFF時,在表'Children'中插入標識列的顯式值。現在我看遍了所有地方,並嘗試了各種屬性,但仍然無法使其工作。
我將不勝感激任何形式的幫助。
更新
從控制器創建方法:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("ID,ParentID")] Child child)
{
if (ModelState.IsValid)
{
_context.Add(child);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(book);
}
只是爲了顯示更多的問題。在這裏,我使用默認的腳手架版本和選擇控件。
public IActionResult Create(int id)
{
if (id == 0)
{
return NotFound();
}
ViewData["ParentID"] = new SelectList(_context.Parents.Where(x => x.ID == 1), "ID", "ID"); //Works
ViewData["ParentID"] = new SelectList(_context.Parents.Where(x => x.ID == id), "ID", "ID"); // Doesn't work
return View();
}
您可以發佈組成實際的「子」對象的代碼嗎?該錯誤似乎表明您正試圖爲EF標記爲標識列的字段顯式設置一個值。除非它腳手架不正確,'ParentID'不應該是'Child'中的'Identity'列 –
@ stephen.vakil感謝您的回覆,明天我會工作,我將能夠發佈它,但我沒有'除了我所展示的內容之外,沒有什麼改變它會在此行拋出異常「await _context.SaveChangesAsync();」。 – Bielik
將parentID隱藏在窗體內部的視圖上,通過它將返回的信息 – Monah