gpt4 book ai didi

c# - 通过关系表的 Entity Framework 代码优先导航属性

转载 作者:行者123 更新时间:2023-11-30 21:45:29 25 4
gpt4 key购买 nike

我正在尝试使用一些 Entity Framework Code First 模型设置一些导航属性。我希望它们看起来像这个例子:

public class Course
{
[Key]
public int CourseId { get; set; }
public string CourseName { get; set; }
public virtual ICollection<Student> Students { get; set; }
}

public class Student
{
[Key]
public int StudentId { get; set; }
public string StudentName { get; set; }
public virtual ICollection<Course> Courses { get; set; }
}

public class StudentCourses
{
[Key, Column(Order = 0)]
public int StudentId { get; set; }
public virtual Student Student { get; set; }
[Key, Column(Order = 1)]
public int CourseId { get; set; }
public virtual Course Course { get; set; }
}

因此,StudentCourses 表中将建立 Student 和 Course 关系。学生类的一个实例将自动引用该学生的所有类(class),反之亦然,类(class)类的一个实例将自动引用其所有学生。 StudentCourses 类的一个实例会自动引用它的 Student 和 Course。但是当我尝试更新数据库时,这些关系似乎没有得到正确的解释。我在这里缺少什么吗?也许需要在上下文类中进行一些配置?大多数导航属性示例仅显示一对多关系导航属性。

最佳答案

当您有一个 M : M 关系时,您需要构建如下所示的模型。您不需要构建联结表。 EF 会在您进行数据迁移时为您创建一个。

使用约定的模型配置。

public class Student
{
public Student()
{
this.Courses = new HashSet<Course>();
}

public int StudentId { get; set; }

public string StudentName { get; set; }

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

public class Course
{
public Course()
{
this.Students = new HashSet<Student>();
}

public int CourseId { get; set; }
public string CourseName { get; set; }

public virtual ICollection<Student> Students { get; set; }
}

你的上下文类应该是这样的。

public class YourDBContext : DBContext
{
public YourDBContext () : base("Default")
{
}

public DbSet<Student> Students { get; set; }

public DbSet<Course> Courses { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}

关于c# - 通过关系表的 Entity Framework 代码优先导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40135790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com