EF Core多对多关系中间表数据插入方法及实体类创建
EF Core 实现多对多关联插入及实体类定义
1. 定义实体类
员工实体(Employees)
public class Employee { public int ID { get; set; } public string EmpName { get; set; } // 导航属性:关联的项目集合 public ICollection<EmployeeProject> EmployeeProjects { get; set; } = new List<EmployeeProject>(); }
项目实体(Project)
public class Project { public int ID { get; set; } public string ProjectName { get; set; } // 导航属性:关联的员工集合 public ICollection<EmployeeProject> EmployeeProjects { get; set; } = new List<EmployeeProject>(); }
中间关联实体(EmployeesProject)
public class EmployeeProject { public int EmpID { get; set; } public Employee Employee { get; set; } public int ProjectID { get; set; } public Project Project { get; set; } }
2. 在DbContext中配置多对多关系
在自定义DbContext的OnModelCreating方法中配置关联规则,指定中间表的复合主键与外键映射:
public class AppDbContext : DbContext { public DbSet<Employee> Employees { get; set; } public DbSet<Project> Projects { get; set; } public DbSet<EmployeeProject> EmployeeProjects { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { // 配置中间表的复合主键 modelBuilder.Entity<EmployeeProject>() .HasKey(ep => new { ep.EmpID, ep.ProjectID }); // 配置员工与中间表的关联 modelBuilder.Entity<EmployeeProject>() .HasOne(ep => ep.Employee) .WithMany(e => e.EmployeeProjects) .HasForeignKey(ep => ep.EmpID); // 配置项目与中间表的关联 modelBuilder.Entity<EmployeeProject>() .HasOne(ep => ep.Project) .WithMany(p => p.EmployeeProjects) .HasForeignKey(ep => ep.ProjectID); } // 配置数据库连接(替换为你的实际连接字符串) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("你的数据库连接字符串"); } }
3. 插入关联数据的几种实现方式
方式一:直接创建中间表实体插入
已知已存在的员工ID和项目ID时,直接实例化中间表实体添加:
using var context = new AppDbContext(); // 关联ID为1的员工与ID为2的项目 var empProject = new EmployeeProject { EmpID = 1, ProjectID = 2 }; context.EmployeeProjects.Add(empProject); context.SaveChanges();
方式二:通过导航属性添加关联
已加载员工或项目实体时,通过导航属性关联:
using var context = new AppDbContext(); // 获取已存在的员工和项目 var employee = context.Employees.Find(1); var project = context.Projects.Find(2); // 从员工侧添加关联 employee.EmployeeProjects.Add(new EmployeeProject { Project = project }); context.SaveChanges();
方式三:批量插入关联
一次性添加多组关联关系:
using var context = new AppDbContext(); var empProjects = new List<EmployeeProject> { new EmployeeProject { EmpID = 1, ProjectID = 2 }, new EmployeeProject { EmpID = 1, ProjectID = 3 }, new EmployeeProject { EmpID = 2, ProjectID = 2 } }; context.EmployeeProjects.AddRange(empProjects); context.SaveChanges();
内容的提问来源于stack exchange,提问作者Erum Mirza
相关产品推荐
相关产品推荐

