我收到这个错误:
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");
}
如果我必须在
db.SaveChanges();
之前进行其他更改,通常我会使用db.Entry(member).State = EntityState.Modified;
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/