更改与实体框架核心的关系

时间:2020-02-24 16:45:13

标签: asp.net-core-mvc entity-framework-core

我是Entity Framework Core和Code First的新手。在我的设计方法中,我在两个实体之间犯了错误。

我创建了一个表 subCourses ,该表当前设置为与 Instructors 具有一对多的关系。这意味着一个子课程可以有很多教练,这是我的错,这是我的错,我想反过来,这样一个教练可以有很多子课程。

我还没有创建任何控制器或生成任何视图或向这些表填充任何数据。

这是subCourse的缩写模型代码:

public class SubCourse
{

    //Constructor
    public SubCourse()
    {
        Instructors = new List<Instructor>();
    }

    [Key]
    public int SubCourseID { get; set; }


    [Column(TypeName = "nvarchar(10)")]
    [DisplayName(" Local Course Name")]
    [Required(ErrorMessage = "You must fill in Local Sub Course name.")]
    public string LocalCourseCode { get; set; }

    public List<Instructor> Instructors { get; set; }
}

这是教员的简化模型代码:

public class Instructor
{
    [Key]
    public int InstructorID { get; set; }

    [MaxLength(50)]
    [Column(TypeName = "nvarchar(50)")]
    [DisplayName("First Name")]
    [Required(ErrorMessage = "You must fill in the first name.")]
    public string FirstName { get; set; }

    [MaxLength(50)]
    [Column(TypeName = "nvarchar(50)")]
    [DisplayName("Last Name")]
    [Required(ErrorMessage = "You must fill in the last name.")]
    public string LastName { get; set; }

    public SubCourse SubCourse { get; set; }
    public int SubCourseID { get; set; }

}

我需要改变我的结构来改变我的关系,然后我可以在包管理器控制台中进行以下更改吗?

添加迁移ChangeRelationInstructorSubCourse

更新数据库

谢谢

1 个答案:

答案 0 :(得分:1)

如果要在Instructor和SubCourse之间建立一对多关系,则可以如下更改模型设计:

 public class SubCourse
{

    [Key]
    public int SubCourseID { get; set; }

    [Column(TypeName = "nvarchar(10)")]
    [DisplayName(" Local Course Name")]
    [Required(ErrorMessage = "You must fill in Local Sub Course name.")]
    public string LocalCourseCode { get; set; }

    public int InstructorID { get; set; }
    public Instructor Instructor { get; set; }
}

public class Instructor
{
    public Instructor()
    {
        SubCourses = new List<SubCourse>();
    }

    [Key]
    public int InstructorID { get; set; }

    [MaxLength(50)]
    [Column(TypeName = "nvarchar(50)")]
    [DisplayName("First Name")]
    [Required(ErrorMessage = "You must fill in the first name.")]
    public string FirstName { get; set; }

    [MaxLength(50)]
    [Column(TypeName = "nvarchar(50)")]
    [DisplayName("Last Name")]
    [Required(ErrorMessage = "You must fill in the last name.")]
    public string LastName { get; set; }

    public List<SubCourse> SubCourses { get; set; }
}

然后在Package Manager控制台中生成一个包含新关系的新迁移文件

Add-Migration ChangeRelationInstructorSubCourse

将新关系更新到数据库中

Update-Database

对于EF Core中的关系,您可以抽出时间来学习the official document