c# – 我需要使用带有实体框架的交叉引用表

我是C#编程的新手,我开始学习MVC4框架.我决定只用一个小的网络应用程序想法来进行辅导计划.我在系统中添加了一个受限者时遇到了问题.我无法提供我需要帮助的表关系图,所以这里…

我有3张桌子:

地址:
ADDRESS_ID
地址1
地址2

……

受指导者:
mentee_id
名字
中间名字

……

Mentee_Address:
mentee_id
ADDRESS_ID

当然EF不识别交叉引用表,因此Mentee的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();
  }
}

最佳答案 您可以通过将地址添加到mentee.addresses集合(或者相反,无关紧要)来创建被指导者和地址之间的关系,如下所示:

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

    db.SaveChanges();
}

在此示例中,您不需要显式地将地址添加到上下文中,因为它将与添加被引用者一起自动发生.代码将INSERT新数据库,新地址和链接记录到链接表Mentee_Address.我不确定你是否要插入受指导者和地址,但这也是你的原始代码也会做的.我上面的例子只是将链接记录添加到过程中.

点赞