我需要使用实体框架的交叉引用表

本文关键字:引用 框架 实体 | 更新日期: 2023-09-27 18:30:07

我是C#编程的新手,我开始学习MVC4框架。我决定用一个小的网络应用程序的想法来指导一个项目。我遇到了在系统中添加学员的问题。我无法提供我需要帮助的表关系图,所以下面是。。。

我有3张桌子:

地址:address_id地址1地址2城市……

受试者:mentee_idfirst_namemiddle_namelast_name……

Mentee_Address:mentee_idaddress_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在没有实际更新交叉引用表Mente_Address的情况下这样做。如果可以的话,有人能提供详细的解释吗?如果不能,我需要一种访问交叉引用表的方法,以便更新它。

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

我需要使用实体框架的交叉引用表

通过将address添加到mentee.addresses集合来创建menteeaddress之间的关系(或者反过来,这无关紧要),如下所示:

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

在本例中,您不需要显式地将address添加到上下文中,因为它将与添加mentee一起自动发生。该代码将向数据库中插入一个新的mentee、一个新address和一个链接记录到链接表Mentee_Address中。我不确定是否要同时插入menteeaddress,但这也是原始代码的作用。我上面的例子只是将链接记录添加到过程中。