我有两张应该相关的表。
表和Coloums规范
主键表
产品分类
ProductCategoryID
外键表
SubProductCategory2
ProductCategoryID
在控制器中,我在创建子类别时有以下方法......
public ActionResult Create()
{
ViewBag.ProductCategory = db.ProductCategories.OrderBy(p =>
p.ProductCategoryID).ToList();
ViewBag.SubProductCategory2 = db.SubProductCategory2.OrderBy(a =>
a.ProductCategoryID).ToList();
var PC2 = new SubProductCategory2();
return View(PC2);
}
public ActionResult Create(SubProductCategory2 Createsubcat2,
FormCollection values)
{
if (ModelState.IsValid)
{
db.AddToSubProductCategory2(Createsubcat2);
db.SaveChanges();
//error pointing here and the full error message I am getting is...
/*error: System.Data.SqlClient.SqlException:
* The INSERT statement conflicted with the FOREIGN KEY constraint
* "FK_SubProductCategory2_ProductCategory". The conflict occurred in
* database "MyHouseDB", table "dbo.ProductCategory", column
* 'ProductCategoryID'. The statement has been terminated.*/
return RedirectToAction("/");
}
ViewBag.ProductCategory = db.ProductCategories.OrderBy(p =>
p.ProductCategoryID).ToList();
ViewBag.SubProductCategory2 = db.SubProductCategory2.OrderBy(a =>
a.ProductCategoryID).ToList();
return View(Createsubcat2);
}
ViewBag.ProductCategory = db.ProductCategories.OrderBy(p =>
p.ProductCategoryID).ToList();
ViewBag.SubProductCategory2 = db.SubProductCategory2.OrderBy(a =>
a.ProductCategoryID).ToList();
return View(Createsubcat2);
在视图中我有以下代码......
<div class="editor-label">
@Html.LabelForModel()
</div>
<div class="editor-field">
@Html.DropDownList("CategoryName", new
SelectList((System.Collections.IEnumerable)ViewData["ProductCategory"],
"ProductCategoryID", "CategoryName"))
@Html.ValidationMessageFor(model => model.ProductCategory.CategoryName)
有些人可以告诉我如何解决与FOREIGN KEY约束错误消息冲突的INSERT语句。纠正我,如果我错了,我是否错误地创建了两个表之间的关系或其他问题在哪里?提前致谢。
答案 0 :(得分:1)
如果满足以下条件,则会发生此错误1)“ProductCategory”中为“ProductCategory”选择的值不存在于“ProductCategory”表中或2)产品类别表为空。
您是否在产品类别表中包含值?
您为ProductCategoryID选择了什么值?
答案 1 :(得分:0)
我发现了这个问题。这是我的sql数据库设计而不是MVC编码方面。我从SubCategory表中删除了CategoryName列。只要Allow Null设置为true,我就能感受到CategoryName。没有必要这样做,已经为两个表正确设置了PrimaryKey。