实体之间的关系(EF基础系列篇7)

EF实体之间的关系分为:

1.一对一;

2.一对多;

3.多对多;

一对一关系:

Student和StudentAddress之间:

public partial class Student
    {
        public int StudentID { get; set; }
        public string StudentName { get; set; }
        public Nullable<int> StandardID { get; set; }
        public string RowVersion { get; set; }

        public virtual Standard Standard { get; set; }
        public virtual StudentAddress StudentAddress { get; set; }
    }
 public partial class StudentAddress
    {
        public int StudentID { get; set; }
        public string Address1 { get; set; }
        public string Address2 { get; set; }
        public string City { get; set; }
        public string State { get; set; }

        public virtual Student Student { get; set; }
    }

一对多关系:

上面很多,就举出一例吧,Teacher和Standard

 public partial class Standard
    {
        public Standard()
        {
            this.Students = new HashSet<Student>();
            this.Teachers = new HashSet<Teacher>();
        }

        public int StandardID { get; set; }
        public string StandardName { get; set; }
        public string Description { get; set; }

        public virtual ICollection<Student> Students { get; set; }
        public virtual ICollection<Teacher> Teachers { get; set; }
    }
 public partial class Teacher
    {
        public Teacher()
        {
            this.Courses = new HashSet<Course>();
        }

        public int TeacherID { get; set; }
        public string TeacherName { get; set; }
        public Nullable<int> StandardID { get; set; }
        public string TeacherType { get; set; }

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

多对多关系:

Student和Course之间:

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

        public int StudentID { get; set; }
        public string StudentName { get; set; }
        public Nullable<int> StandardID { get; set; }
        public string RowVersion { get; set; }

        public virtual Standard Standard { get; set; }
        public virtual StudentAddress StudentAddress { get; set; }
        public virtual ICollection<Course> Course { get; set; }
    }
 public partial class Course
    {
        public Course()
        {
            this.Student = new HashSet<Student>();
        }

        public int CourseID { get; set; }
        public string CourseName { get; set; }
        public string Location { get; set; }
        public Nullable<int> TeacherID { get; set; }

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

注意:需要注意的是,EF支持多对多的关系,仅仅是关联表(这里是StudentCourse),不包含Student和Course主键之外,任何其他的列的表。如果关联表包含了其他的列,比如删除日期(Datedelete),然后你必须得手动去操作,来实现多对多的关系;

我们以XML视图,来打开实体数据模型,可以看到在SSDL中,可以看到StudentCourse  EntitySet实体集, CSDL不包含StudentCourse实体集,代替是的,它被映射成在Student和Course的导航属性里面,在MSL(C-S Mapping)中可以看到它在<AssociationSetMapping>节点中

所以,多对多的关系在实体数据模型的C-S mapping部分中,所以当你向Student表中添加一个Course的时候,或者向Course表中添加一个Student的时候,然后你保存的时候,将会把你插入的学生的或者课程的主键添加到StudentCourse表中,所以这个映射不仅方便关联这两个实体,而且方面管理增删查改的操作;

时间: 2024-11-12 00:31:39

实体之间的关系(EF基础系列篇7)的相关文章

安装Entity Framework(EF基础系列篇4)

Entity Framework 5.0 API是分布在两个地方:NuGet和.NET Framework中,这个.NET framework 4.0/4.5包含EF核心的API,然而通过NuGet包获取的EntityFramework.dll包含EF 5.0特别的特性:EF6.0中不是分开的: 在这个基础的系列课程中,我将会使用EF 6.0,这个最新的EF版本来学习, 学习EF,首先要安装下面的工具: .NET Framework 4.5 Visual Studio 2012/2013/201

EF框架组件详述(EF基础系列篇3)

我们来看看EF的框架设计吧: EDM(Entity Data Model)[实体数据模型]:实体数据模型包含三个主要部分:概念模型,映射,存储模型: Conceptual Model[概念模型]:包含模型类和类之间的关系.概念模型是独立于数据库设计的: Storage Model[存储模型]:存储模型是数据库设计的实体,它包含数据表,视图,存储过程,还有他们之间的关系和键值: Mapping[映射]:映射包含这个概念模型怎么映射到存储模型的信息: LINQ to Entities:LINQ to

EF中的实体类型(EF基础系列篇6)

EF中有两种类型的实体:POCO Entity和dynamic proxy entity. POCO Entity (Plain Old CLR Object) POCO class是一个类,它不依赖任何.NET framework的基类,它就像任何其他的普通类一样,这也是为什么被称之为“Plain Old CLR Object”的原因: 这些由实体数据模型生成的POCO实体支持大多数的增删查改的功能.下面是一个Studnet POCO实体: public class Student { pub

EF开发模式(EF基础系列篇9)

EF有三种开发的模式: 1.Code First 2.Model First 3.Database First Code First:在Code First方法中,你完全避免了直接操作实体设计器(EDMX).我们开始自己写领域类,用这些领域类来生成数据库. Model First:在Model First中,你直接通过实体数据模型(EDMX)创建实体,关系,层级继承,然后根据你的Model生成数据库: Database First:根据已经存在的数据库,然后添加实体数据模型,从数据库中创建生成了

实体生命周期(EF基础系列8)

在我们进行增删查改操作之前,相当重要去理解实体的生命周期,它是怎么被EF操作的. 在实体的生命周期过程中,每个实体基于上下文的操作都会有一个实体状态,实体状态是一个枚举类型的值:System.Data.Entity.EntityState,包含下面的值: 1.Added 2.Deleted 3.Modified 4.Unchanged 5.Detached 数据上下文不仅包含所有从数据库中检索的对象的引用,并且它有这个实体对象的实体状态,维护修改实体的属性,这个特性叫做更改跟踪. 实体状态从“U

EF基础概念篇

EF自己包括看视频,看MSDN零零散散的学了一点皮毛,这次打算系统学习一下EF.我将会使用VS2012来学习这个EF基础系列. 现在看看EF的历史吧: EF版本 相关版本特性介绍 EF3.5 基本的对象关系映射,支持DB First 方式(Basic O/RM support with Database First approach.) EF4.0 支持简单传统CLR对象(Plain old CLR Object),懒加载,可测试的改进,可以自定义代码的生成,支持ModeFirst: (POCO

神经张量网络:探索文本实体之间的关系

欢迎大家前往云加社区,获取更多腾讯海量技术实践干货哦~ 译者:Waitingalone 本文翻译自Gaurav Bhatt在 http://deeplearn-ai.com 发表的NEURAL TENSOR NETWORK: EXPLORING RELATIONS AMONG TEXT ENTITIES.文中版权.图像代码等数据均归作者所有.为了本土化,翻译内容略作修改. 在这篇文章中,我将介绍神经张量网络(NTN),如在用神经张量网络推理知识库的推理中所描述的那样 .我的NTN实现使用最新版本

实体之间的关系

拿学生信息举例 查询所有学生记录,包含年级名称 Student表实体类 Grade表实体类 Dao层 测试类 实体之间的关系分为四种 1.一对一 2.一对多 3.多对一 4.多对多 原文地址:https://www.cnblogs.com/wangdayexinyue/p/10945123.html

EF中的开放式并发(EF基础系列)

好久没更新EF这个系列了,现在又重新开始. 这次学习,开放式并发.首先拿出数据库脚本: 说明一下,这个数据库脚本是之前的章节中稍作修改的: USE [SchoolDB] GO /****** Object: Table [dbo].[Student] Script Date: 11/30/2015 21:42:07 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Student]( [Stu