簡體   English   中英

一對多關系不編輯子表

[英]One-To-Many Relationship not editing Child table

public class Class1
{
    public Guid Class1ID { get; set; }
    public string class1string { get; set; }
    public virtual Class2 Class2 { get; set; }
}

public class Class2
{
    public Guid Class2ID { get; set; }
    public string class2string { get; set; }
}

// POST: Class1/Edit/5
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Edit(Guid id, [Bind("Class1ID,Class2,class1string")] Class1 class1)
    {
        if (id != class1.Class1ID)
        {
            return NotFound();
        }

        if (ModelState.IsValid)
        {
            try
            {
                _context.Update(class1);
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!Class1Exists(class1.Class1ID))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }
            return RedirectToAction("Index");
        }
        return View(class1);
    }

而不是使用Edit更改子表中的數據,而是在表中創建新行並更改父表中的GUID。 父表已正確編輯。

任何幫助將不勝感激。

在第1類中,還應添加與主鍵屬性匹配的外鍵ID。 EF將了解其相關信息

public class Class1
{
    public Guid Class1ID { get; set; }
    public string class1string { get; set; }
    public Guid? Class2ID { get; set; }
    [ForeignKey("Class2ID ")]//probably not needed as names match
    public virtual Class2 Class2 { get; set; }
}

public class Class2
{
    public Guid Class2ID { get; set; }
    public string class2string { get; set; }
}

這樣,在更新class1您只需要檢查您是否傳遞了正確的Class2ID屬性,而不必擔心導航對象屬性Class2

為了節省您需要修飾它,

 public async Task<IActionResult> Edit(Class1 class1)
 {
     ...
     _context.Entry(class1).State = EntityState.Modified;
     await _context.SaveChangesAsync();

我也一直在努力解決這個問題。

當我進行編輯並保存時,我點擊了函數public async Task Edit(Guid id,[Bind(“ Class1ID,Class2,class1string”)] Class1 class1) (如您所願 )-

class1.Class2.Class2ID外,所有值都是正確的, 該類是空的GUID {00000000-0000-0000-0000-0000-000000000000}

結果,當調用SaveChangesAsync時,EF會為Class2創建一個新記錄,而不是按預期更新現有記錄。

是因為綁定失敗,所以找不到Class2.Class2ID的值。

這是因為Get無法加載此值,因為幾乎可以肯定該值不在頁面上。

將以下行添加到視圖標記中(建議在輸入type =“ hidden” asp-for =“ Class1ID”旁邊

 <input type="hidden" asp-for="Class2.Class2ID" />

這應該使綁定起作用。

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM