Asp.net mvc 实体框架-何时/为什么需要为“实体”建模;链接“;桌子
首先,我会说我是一个数据库人,正在进入.NET、MVC、EF等领域。因此,我完全理解连接和外键等,但我正在与EF方面进行斗争 我完成了一个教程,我们做了以下工作:Asp.net mvc 实体框架-何时/为什么需要为“实体”建模;链接“;桌子,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,首先,我会说我是一个数据库人,正在进入.NET、MVC、EF等领域。因此,我完全理解连接和外键等,但我正在与EF方面进行斗争 我完成了一个教程,我们做了以下工作: 创建一个学生表(StudentID和个人详细信息)、一个课程表(CourseID和科目详细信息)和一个注册表(EnrollmentID、学生和课程ID以及为该类学生提供的分数) 为学生和注册实体创建模型、控制器和视图,以允许编辑学生姓名、注册学生上课并给他们评分、列出所有注册等 在那个教程中,注册表(我称之为)是一个“桥梁”表,因
- 创建一个学生表(StudentID和个人详细信息)、一个课程表(CourseID和科目详细信息)和一个注册表(EnrollmentID、学生和课程ID以及为该类学生提供的分数)
- 为学生和注册实体创建模型、控制器和视图,以允许编辑学生姓名、注册学生上课并给他们评分、列出所有注册等
- 文章(ArticleID、标题、作者、摘要、内容…)是
- 类别(类别ID、标题、说明等)
请有人用简单的术语解释一下——我是否只是因为该教程中数据的“多对多”性质而感到不快,或者“桥接”表结构是否对EF导航PK/FK关系更为重要。我认为您正在阅读的教程试图向您介绍EF的基本概念。如果您有多对多关系,在数据库端,您将始终有三个表:
Student
Course
Enrollment (Student_Id, Course_Id)
在EF world上,您可以将这三个表表示为三个不同的实体。但是,如果您希望以更“自然”的方式表示学生与课程之间的关系,EF允许您声明多对多列表,最多两个列表:
public class Student {
... properties
virtual List<Course> Courses;
}
public class Course {
... properties
virtual List<Student> Students;
}
公共班级学生{
…属性
虚拟列表课程;
}
公共课{
…属性
虚拟名单学生;
}
但是,您需要指示EF如何处理两侧的引用。为此,您可以使用fluentapi。使用此fluent API,您可以定义引用两个表/实体的表名:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.HasMany<Course>(s => s.Courses)
.WithMany(c => c.Students)
.Map(cs =>
{
cs.MapLeftKey("StudentRefId");
cs.MapRightKey("CourseRefId");
cs.ToTable("StudentCourse");
});
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(s=>s.Courses)
.有很多(c=>c.学生)
.Map(cs=>
{
cs.MapLeftKey(“StudentRefId”);
cs.MapRightKey(“CourseRefId”);
cs.ToTable(“学生课程”);
});
}
使用fluent库API解释M:N关系。非常简单,因此中间不需要额外的元素
在UI方面,您只需要选择学生想要学习的课程列表,或者该课程必须拥有的学生列表。由您决定如何向用户呈现信息,因为两种功能(参加课程的学生和定义其学生的课程)都指向相同的m:n关系
我认为一个简单的方法是向学生展示一个
列表,然后展示他可以申请的课程列表
您要创建的项目使用相同的想法。基本上,有了EF,你将永远需要从“表格”的角度来思考。的确,EF允许您将表抽象为实体,但仍然需要遵循一些规则。总而言之:你是对的。“桥接”表是您需要存储多对多关系的地方 我认为您正在阅读的教程是为了向您介绍EF的基本概念。如果您有多对多关系,在数据库端,您将始终有三个表:
Student
Course
Enrollment (Student_Id, Course_Id)
在EF world上,您可以将这三个表表示为三个不同的实体。但是,如果您希望以更“自然”的方式表示学生与课程之间的关系,EF允许您声明多对多列表,最多两个列表:
public class Student {
... properties
virtual List<Course> Courses;
}
public class Course {
... properties
virtual List<Student> Students;
}
公共班级学生{
…属性
虚拟列表课程;
}
公共课{
…属性
虚拟名单学生;
}
但是,您需要指示EF如何处理两侧的引用。为此,您可以使用fluentapi。使用此fluent API,您可以定义引用两个表/实体的表名:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.HasMany<Course>(s => s.Courses)
.WithMany(c => c.Students)
.Map(cs =>
{
cs.MapLeftKey("StudentRefId");
cs.MapRightKey("CourseRefId");
cs.ToTable("StudentCourse");
});
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(s=>s.Courses)
.有很多(c=>c.学生)
.Map(cs=>
{
cs.MapLeftKey(“StudentRefId”);
cs.MapRightKey(“CourseRefId”);
cs.ToTable(“学生课程”);
});
}
使用fluent库API解释M:N关系。非常简单,因此中间不需要额外的元素
在UI方面,您只需要选择学生想要学习的课程列表,或者该课程必须拥有的学生列表。由您决定如何向用户呈现信息,因为两种功能(参加课程的学生和定义其学生的课程)都指向相同的m:n关系
我认为一个简单的方法是向学生展示一个
列表,然后展示他可以申请的课程列表
您要创建的项目使用相同的想法。文学士