5

我是 C# 编程的新手,我开始学习 MVC4 框架。我决定潜入一个小型网络应用程序的想法,用于指导计划。我遇到了向系统添加学员的问题。我无法提供需要帮助的表关系图,所以这里......

我有 3 张桌子:

地址: address_id address1 address2 city ......

被指导者:被指导者 _id first_name middle_name last_name ......

Mentee_Address: mentee_id address_id

当然 EF 不识别交叉引用表,因此 Mentee 和 Address 的 Models 类:

辅导班:

public partial Class mentee
{
  public mentee()
  {
     this.addresses = new HashSet<address>();
  }

  public int mentee_id { get; set; }
  public string first_name { get; set; }
  public string middle_name { get; set; }
  public string last_name { get; set; }

  public virtual ICollection<address> addresses { get; set; }
}

地址类:

public partial Class address
{
  public address()
  {
     this.mentees = new HashSet<mentee>();
  }

  public int address_id { get; set; }
  public string address1 { get; set; }
  public string address2 { get; set; }
  public string city { get; set; }

  public virtual ICollection<mentee> mentees { get; set; }
}

在我的创建视图中,我正在尝试添加学生和地址记录,同时保持与地址和学员的关系完整。我已经读到 EF 这样做并没有实际更新交叉引用表 Mentee_Address。如果是这样,有人可以提供详细的解释,如果没有,我需要一种访问交叉引用表的方法,以便可以更新它。

public ActionResult Create(ViewModels.MenteeViewModel menteeViewModel)
{
  if (ModelState.IsValid)
  {
    db.mentees.Add(menteeViewModel.mentee);
    db.addresses.Add(menteeViewModel.address);
    db.SaveChanges();
  }
}
4

1 回答 1

3

mentee您可以通过将和address添加address到集合中来创建和之间的关系mentee.addresses(或者相反,没关系),如下所示:

if (ModelState.IsValid)
{
    menteeViewModel.mentee.addresses.Add(menteeViewModel.address);
    db.mentees.Add(menteeViewModel.mentee);

    db.SaveChanges();
}

在此示例中,您无需address显式将 . 添加到上下文中,因为它会与添加mentee. 该代码将向mentee数据库插入一个新的,一个新的address和一个链接记录到链接表中Mentee_Address。我不确定您是否要同时插入menteeand address,但这也是您的原始代码会做的事情。我上面的示例只是将链接记录添加到过程中。

于 2013-09-04T17:54:56.857 回答