c# - UPDATE 语句与 asp.net mvc 5 中的 FOREIGN KEY 约束冲突

标签 c# mysql sql asp.net asp.net-mvc

我收到这个错误:

The UPDATE statement conflicted with the FOREIGN KEY constraint "FK_TitleMember". The conflict occurred in database "ParishDBSQL", table "dbo.Titles", column 'title_id'. The statement has been terminated.

控制者

采取行动

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; }
}

View 模型

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 在主表中找不到它,它不可能是外键。检查此变量的正确值

如果它不能解决您的问题,请查看您的代码,我看到了一些我不太理解的东西。

尝试以这种方式更改您的代码

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.SaveChanges(); 之前进行其他更改,通常我会使用 db.Entry(member).State = EntityState.Modified;

  2. member 已附加到您的表。你为什么 db.Members.Attach(member);

更新

改变

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

进入

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

因为ViewBag是动态对象

关于c# - UPDATE 语句与 asp.net mvc 5 中的 FOREIGN KEY 约束冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27294199/

相关文章:

c# - 在 EntityFramework 中选择每个组中的前 n 行

c# - 取消任务

php - 如何在 Bootstrap Modal 中传递 GET 变量?

java - 这种情况下是否可以避免N+1次请求呢?

mysql - 如何更新 MySQL 中的所有列

c# - 如何从非实体类型的sql查询中检索多列?

c# - 应用约束的通用错误

php - mysql用循环计数行

php - 使用 id 自动递增在数据库中插入值

php - 在 WordPress 中显示日历