Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 实体框架-何时/为什么需要为“实体”建模;链接“;桌子_Asp.net Mvc_Entity Framework - Fatal编程技术网

Asp.net mvc 实体框架-何时/为什么需要为“实体”建模;链接“;桌子

Asp.net mvc 实体框架-何时/为什么需要为“实体”建模;链接“;桌子,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,首先,我会说我是一个数据库人,正在进入.NET、MVC、EF等领域。因此,我完全理解连接和外键等,但我正在与EF方面进行斗争 我完成了一个教程,我们做了以下工作: 创建一个学生表(StudentID和个人详细信息)、一个课程表(CourseID和科目详细信息)和一个注册表(EnrollmentID、学生和课程ID以及为该类学生提供的分数) 为学生和注册实体创建模型、控制器和视图,以允许编辑学生姓名、注册学生上课并给他们评分、列出所有注册等 在那个教程中,注册表(我称之为)是一个“桥梁”表,因

首先,我会说我是一个数据库人,正在进入.NET、MVC、EF等领域。因此,我完全理解连接和外键等,但我正在与EF方面进行斗争

我完成了一个教程,我们做了以下工作:

  • 创建一个学生表(StudentID和个人详细信息)、一个课程表(CourseID和科目详细信息)和一个注册表(EnrollmentID、学生和课程ID以及为该类学生提供的分数)
  • 为学生和注册实体创建模型、控制器和视图,以允许编辑学生姓名、注册学生上课并给他们评分、列出所有注册等
在那个教程中,注册表(我称之为)是一个“桥梁”表,因为学生与班级是一种多对多关系

那么,如果是这样的多对多场景,我是否只需要这个“中间”模型/视图/控制器

我想要编程的实际结构是:

  • 文章(ArticleID、标题、作者、摘要、内容…)是
  • 类别(类别ID、标题、说明等)
然后,我想有一个类别的下拉列表(或任何UI元素),单击所选类别将显示一个页面,其中包含该类别中文章的标题/作者/摘要表

如果一篇文章可以分为多个类别(“有效使用Catnip”可以分为“与猫玩游戏”和“生活黑客”)那么我需要一张“桥牌”桌子吗


请有人用简单的术语解释一下——我是否只是因为该教程中数据的“多对多”性质而感到不快,或者“桥接”表结构是否对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关系

我认为一个简单的方法是向学生展示一个
列表,然后展示他可以申请的课程列表

您要创建的项目使用相同的想法。文学士