【问题标题】:Issue with many to many relationship in code first c#代码优先c#中的多对多关系问题
【发布时间】:2014-02-28 09:53:55
【问题描述】:

我首先使用实体​​框架代码在我的项目中创建数据库。我已经定义了以下两个表之间的多对多关系。:

  1. 学生
  2. 课程

Fluent API

modelBuilder.Entity<Student>().HasMany(e => e.Courses)
            .WithMany(e => e.Students).Map(m =>
             {
                m.MapLeftKey("StudentId");
                m.MapRightKey("CourseId");
                m.ToTable("StudentCourse");
             });

这将定义 StudentCourse 之间的 多对多 关系,并将创建一个新表 StudentCourse在数据库中。

现在我想定义一个新的关系(可能是 1 到 11 到很多

  1. 学生课程
  2. 任何其他表

我怎样才能先用实体框架代码做到这一点??

【问题讨论】:

    标签: c# ef-code-first


    【解决方案1】:

    如果不为 StudentCourse 创建一个自己的类 (poco),你想要什么是不可能的

    public class StudentCourse
    {
        public int Id {get;set;}
        public Student Student {get; set;}
        public Course Course {get; set;}
    
    }
    

    然后用fluent api来做这三个变量的关系

    modelBuilder.Entity<StudentCourse>()
        .HasRequired(i => i.Student)
        .WithMany(u => u.StudentCourses)
        .HasForeignKey(i => i.StudentId)
        .WillCascadeOnDelete(false);
    
    modelBuilder.Entity<StudentCourse>()
        .HasRequired(i =>i.Course)
        .WithMany(d =>d.StudentCourses)
        .HasForeignKey(i => i.CourseId)
        .WillCascadeOnDelete(false);
    

    StudentCourses 是学生类和课程类中的导航属性

    您可以使用定义的 Id 作为主键,也可以使用两个表的外键作为主键:

    modelBuilder.Entity<StudentCourse>()
        .HasKey(i => new {i.StudentId,i.CourseId });
    

    在我看来,使用 Id 作为主键可以让您更简单地在 StudentCourse 和另一个表之间建立关系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      相关资源
      最近更新 更多