2016-04-13 31 views
0

我有一个非常简单的问题。我是ASP.NET MVC的新手,在遵循代码优先技术的同时,对关系非常困惑。asp.net mvc中一个记录的多个外键关系,代码优先

我有两个模型类。我想把它形容为一个人可以有很多课程

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

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

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

    /* I removed above line from model because it was not creating any Course Field in Db table of Person and added a third table */ 
} 

为了让我创建了一个包含个人和重复过程

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

所以模型加入将仅具有两个属性标识的的ID的另一个模型类的关系。我想问我们如何以最佳方式实现这一目标。

课程价值将始终为零,因此我们无法在其中添加任何课程。我们将在代码中为它分配一个对象?

在stackoverflow上有很多问题,但没有人从头开始描述它。

是否有任何教程添加更新删除表与外键。

任何帮助,将不胜感激。

enter image description here

+0

如果一个人可以有很多课程,那么'Person'表不应该有课程领域。应该有一个新表来存储PersonId和CourseId。 – Hendry

回答

1

课程集合应在Person类,试试这个:

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

因此,举例来说,如果你想添加一个人用一疗程。

var person = new Person(); 
var courses = new List<Course>(); 
courses.Add(new Course()); 
person.Courses = courses; 
dbContext.Persons.Add(person); 
dbContext.SaveChanges(); 
+0

Person.Courses为null,不允许添加@Charlie编辑的 – Charlie

+0

。 – Hendry

相关问题