C# asp.net mvc中一条记录的多个外键关系,代码优先

C# asp.net mvc中一条记录的多个外键关系,代码优先,c#,asp.net-mvc,code-first,C#,Asp.net Mvc,Code First,我有一个非常简单的问题。我是ASP.NETMVC新手,在遵循代码优先技术时,对关系非常困惑 我有两个模型课。我想把它描述为一个人可以有很多课程 公共类人物 { [关键] [数据库生成(DatabaseGeneratedOption.Identity)] 公共int PersonId{get;set;} } 公共课 { [关键] [数据库生成(DatabaseGeneratedOption.Identity)] public int CourseId{get;set;} //公共虚拟ICollec

我有一个非常简单的问题。我是ASP.NETMVC新手,在遵循代码优先技术时,对关系非常困惑

我有两个模型课。我想把它描述为一个人可以有很多课程

公共类人物
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
公共int PersonId{get;set;}
}
公共课
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
public int CourseId{get;set;}
//公共虚拟ICollection课程{get;set;}
/*我从模型中删除了上述行,因为它并没有在Person的Db表中创建任何课程字段,并添加了第三个表*/
}
为了建立一个关系,我创建了另一个模型类,其中包含人员Id和重复Id

public class ModelJoin
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ModelJoinId { get; set; }

    [ForeignKey("Person")]
    public int PersonId { get; set; }
    public virtual Person Person{ get; set; }

    //One to many relationships 
    public virtual ICollection<Course> Courses{ get; set; }
}
公共类ModelJoin
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
public int ModelJoinId{get;set;}
[外籍人士(“人士”)]
公共int PersonId{get;set;}
公共虚拟人{get;set;}
//一对多关系
公共虚拟ICollection课程{get;set;}
}
因此,模型联接将只有两个属性。我想问我们如何以最佳方式实现这一目标

课程的值将始终为空,因此我们不能在其中添加任何课程。我们将在代码中的何处为其指定对象

关于stackoverflow有很多问题,但没有人从头开始描述它

是否有关于使用外键添加更新删除表的教程

任何帮助都将不胜感激


我认为你需要多对多的关系,因为一个学生可以报名参加多个课程,而一个课程可以由多个学生参加

看看这个:
我认为你需要多对多的关系,因为一个学生可以报名参加多个课程,而一个课程可以由多个学生参加

看看这个:

课程集合应在
个人
类中,请尝试以下操作:

public class Person
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int PersonId { get; set; }

    public virtual ICollection<Course> Courses { get; set; }
}

public class Course
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int CourseId { get; set; }
}
公共类人物
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
公共int PersonId{get;set;}
公共虚拟ICollection课程{get;set;}
}
公共课
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
public int CourseId{get;set;}
}
举个例子,如果你想增加一个有课程的人

var person = new Person();
var courses = new List<Course>();
courses.Add(new Course());
person.Courses = courses;
dbContext.Persons.Add(person);
dbContext.SaveChanges();
var person=new person();
var courses=新列表();
课程。添加(新课程());
个人。课程=课程;
dbContext.Persons.Add(person);
dbContext.SaveChanges();

课程集合应在
个人
类中,请尝试以下操作:

public class Person
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int PersonId { get; set; }

    public virtual ICollection<Course> Courses { get; set; }
}

public class Course
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int CourseId { get; set; }
}
公共类人物
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
公共int PersonId{get;set;}
公共虚拟ICollection课程{get;set;}
}
公共课
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
public int CourseId{get;set;}
}
举个例子,如果你想增加一个有课程的人

var person = new Person();
var courses = new List<Course>();
courses.Add(new Course());
person.Courses = courses;
dbContext.Persons.Add(person);
dbContext.SaveChanges();
var person=new person();
var courses=新列表();
课程。添加(新课程());
个人。课程=课程;
dbContext.Persons.Add(person);
dbContext.SaveChanges();

如果一个人可以有多个课程,则
person
表不应包含课程字段。应该有一个新表来存储PersonId和CourseId。如果一个人可以有许多课程,那么
person
表不应该有课程字段。应该有一个新表来存储PersonId,CourseId.Person.Courses为null,它将不允许添加Person。Courses为null,它将不允许添加Person