假设有两个模型:Parent和Child。Child包含一个指向Parent的外键ParentId。
首先,需要在Parent中定义一个ICollection
public class Parent
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection Children { get; set; }
}
接下来,在Child模型中添加一个Parent导航属性。
public class Child
{
public int Id { get; set; }
public string Name { get; set; }
public int? ParentId { get; set; }
public Parent Parent { get; set; }
}
在数据库中创建表格时,需要将ParentId列定义为可空的。
现在,来编写控制器的创建方法,以便在添加Child时将其与相应的Parent关联。
[HttpPost]
public ActionResult Create(Child child)
{
if (ModelState.IsValid)
{
// 检查ParentId是否为NULL
if (child.ParentId == null)
{
// 设置默认值或者返回错误信息
ModelState.AddModelError("", "ParentId必须是非空的。");
return View(child);
}
// 获取对应的Parent实体
var parent = db.Parents.Find(child.ParentId);
if (parent == null)
{
// 如果Parent不存在,则返回错误信息
ModelState.AddModelError("", "Parent不存在。");
return View(child);
}
// 将Child添加到Parent的Children集合中,并保存更改
parent.Children.Add(child);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(child);
}
在这个控制器中,我们首先检查ParentId是否为NULL。如果为NULL,则认为操作不合法,在ModelState中添加错误信息并返回视图。否则,我们查找对应的Parent实体。如果找到了Parent,则将Child添加到Parent的Children集合中。