簡體   English   中英

UPDATE語句與asp.net mvc 5中的FOREIGN KEY約束沖突

[英]The UPDATE statement conflicted with the FOREIGN KEY constraint in asp.net mvc 5

我收到此錯誤:

UPDATE語句與FOREIGN KEY約束“FK_TitleMember”沖突。 沖突發生在數據庫“ParishDBSQL”,表“dbo.Titles”,列'title_id'中。 該語句已終止。

調節器

采取行動

public ActionResult Edit(int? id)
    {
       var member = (from h in db.Members
       join f in db.Titles on h.title_id equals f.title_id
                       where h.m_id == id
                      select new
                      {
                          title_id = h.title_id,
                        }).First();
var viewmodel = new MembersViewModel();
        viewmodel.title_id = member.title_id;
ViewBag.Titles = new SelectList(db.Titles.ToList(), "title_id", "Titles", viewmodel.title_id);

return View(viewmodel);

    }

發布行動

public ActionResult Edit(MembersViewModel vm)
    {
        if (ModelState.IsValid)
        {
var member = db.Members.Find(vm.m_id);
          member.title_id = vm.title_id;
   ViewBag.Titles = new SelectList(db.Titles.ToList(), "title_id", "Titles", vm.title_id);

                db.Members.Attach(member);
                db.Entry(member).State = EntityState.Modified;    
 db.SaveChanges();

                return RedirectToAction("Index");

        }

        return View(vm);

視圖

  <div class="col-md-4">
             <div class="form-group">
                <label>Title</label>

                @Html.DropDownList("Titles")
                @Html.ValidationMessageFor(model => model.title_id)
            </div>
        </div>

模型

 public partial class Title
    {
    public Title()
    {
        this.Heads = new HashSet<Head>();
        this.Members = new HashSet<Member>();
    }

    public int title_id { get; set; }
    public string Titles { get; set; }

    public virtual ICollection<Head> Heads { get; set; }
    public virtual ICollection<Member> Members { get; set; }
}

視圖模型

public class MembersViewModel
{
    public int m_id { get; set; }
    public string titles { get; set; }
    public int title_id { get; set; }
}

我想使用我的成員表表上的下拉列表更新title_id,但是我得到上面顯示的錯誤。

我認為錯誤就在這一行

member.title_id = vm.title_id

也許vm.title_id在主表中vm.title_id它並且它不能是外鍵。 檢查此變量的正確值

如果它沒有解決你看到你的代碼的問題,我看到了一些我不太了解的東西。

嘗試以這種方式更改您的代碼

if (ModelState.IsValid)
{
    var member = db.Members.Find(vm.m_id);
    member.title_id = vm.title_id;
    ViewBag.Titles = new SelectList(db.Titles.ToList(), "title_id", "Titles", vm.title_id);   
    db.SaveChanges();
    return RedirectToAction("Index");
}
  1. 通常我使用db.Entry(member).State = EntityState.Modified; 如果我必須在db.SaveChanges();之前做其他更改db.SaveChanges();

  2. member已經附在你的桌子上了。 你為什么db.Members.Attach(member);

更新

更改

@Html.DropDownListFor(m => m.title_id, ViewBag.Titles)


@Html.DropDownListFor(m => m.title_id, (SelectList) ViewBag.Titles)

因為ViewBag是一個動態對象

問題是視圖中的下拉列表。 你真的想要像這樣初始化它:

@Html.DropDownListFor(m => m.title_id, ViewBag.Titles)

現在初始化它的方式會導致所選值作為查詢字符串參數傳遞 - 您應該看到URL被發布為...?Titles=1例如, ...?Titles=1

暫無
暫無

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

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