c# - 我需要将交叉引用表与 Entity Framework 一起使用

标签 c# sql asp.net-mvc-4 entity-framework-4.1

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

我有 3 个表:

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

学员: 学员编号 名 中间名字 姓 ……

Mentee_Address: 学员编号 地址_id

当然 EF 不识别交叉引用表,所以 Mentee 的模型类 和地址:

学员类(class):

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; }
}

在我的创建 View 中,我尝试添加学生和地址记录,同时保持与地址和受训者的关系完整。我读过 EF 在没有实际更新交叉引用表 Mentee_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,但这也是您的原始代码会执行的操作。我上面的示例只是将链接记录添加到过程中。

关于c# - 我需要将交叉引用表与 Entity Framework 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18620358/

相关文章:

c# - 如何使用 Elmah 记录信息

c# - 想要在警报框中显示变量的值

c# - 调用有错误的存储过程,继续并获取完整输出

c# - EF Code First 中的多对多关系表示

php - 使用 SQL MATCH 搜索包含空格的术语

mysql - 如何简化以下 SQL 查询?

sql - 如何在 SQL Server 树格式表中将子描述添加到父标题

asp.net - 在MVC5应用中更改默认标题颜色

wcf - 何时使用MVC4 Web-API和传统的HTTP Web服务?

c# - 反序列化包含原始类型和一种类类型的对象 []