1.学校

[Table("School")]
public partial class School
{
public School()
{
Students = new List<Student>();
Teachers = new List<Teacher>();
}
[Key]
public string SchoolId { get; set; } public string Name { get; set; } public virtual ICollection<Student> Students { get; set; } public virtual ICollection<Teacher> Teachers { get; set; }
}

2.学生

[Table("Student")]
public partial class Student
{
public Student()
{
Teachers = new List<Teacher>();
}
[Key]
public string StudentId { get; set; } public string Name { get; set; } public string PhoneId { get; set; } public string SchoolId { get; set; } public virtual School School { get; set; } public ICollection<Teacher> Teachers { get; set; }
}

3.教师

[Table("Teacher")]
public class Teacher
{
public Teacher()
{
Students = new List<Student>();
}
[Key]
public string TeacherId { get; set; } public string Name { get; set; } public string PhoneId { get; set; } public string SchoolId { get; set; } public virtual School School { get; set; } public virtual ICollection<Student> Students { get; set; }
}

上面三个数据表映射成的实体类,关系是学校有多个学生和老师,每个学生和老师互相对应多个

关系配置在DbContext的OnModelCreating方法中配置

一对多

modelBuilder.Entity<Student>()
.HasRequired(a => a.School)
.WithMany(a => a.Students)
.HasForeignKey(a=>a.StudentId);
modelBuilder.Entity<Teacher>()
.HasRequired(a => a.School)
.WithMany(a => a.Teachers)
.HasForeignKey(a => a.TeacherId);

多对多

modelBuilder.Entity<Teacher>()
.HasMany(a => a.Students)
.WithMany(a => a.Teachers)
.Map
(
a =>
{
a.MapLeftKey("TeacherId");
a.MapRightKey("StudentId");
a.ToTable("Teacher_Student");
} );

Entity Framework 导航属性(2)的更多相关文章

  1. 【EF】Entity Framework实现属性映射约定

    Entity Framework Code First属性映射约定中“约定”一词,在原文版中为“Convention”,翻译成约定或许有些不好理解,这也是网上比较大多数的翻译,我们就当这是Entity ...

  2. Entity Framework实现属性映射约定

    Entity Framework Code First属性映射约定中“约定”一词,在原文版中为“Convention”,翻译成约定或许有些不好理解,这也是网上比较大多数的翻译,我们就当这是Entity ...

  3. Entity FrameWork 实体属性为decimal时默认只保存2位小数

    问题描述:当采用EF的DbContext保存decimal类型数据到数据库,默认只会保存小数点后的前2位小数,其余均置0:例如保存101.182352152322,实际存到数据库里的数据为101.18 ...

  4. Entity Framework 出现 "此 ObjectContext 实例已释放,不可再用于需要连接的操作" 的错误

    原因 Entity的导航属性在View中使用,但是该Entity所在的Context已经在Controller中通过 using 释放掉:但是Entity又具有Deferred Query Evalu ...

  5. Entity Framework Core 生成跟踪列

    本文翻译自<Entity Framework Core: Generate tracking columns>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 注意:我使用的是 ...

  6. 《Entity Framework 6 Recipes》中文翻译系列 (22) -----第五章 加载实体和导航属性之延迟加载

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第五章 加载实体和导航属性 实体框架提供了非常棒的建模环境,它允许开发人员可视化地使 ...

  7. 《Entity Framework 6 Recipes》中文翻译系列 (23) -----第五章 加载实体和导航属性之预先加载与Find()方法

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-2  预先加载关联实体 问题 你想在一次数据交互中加载一个实体和与它相关联实体. ...

  8. 《Entity Framework 6 Recipes》中文翻译系列 (25) ------ 第五章 加载实体和导航属性之加载完整的对象图和派生类型上的导航属性

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-5  加载完整的对象图 问题 你有一个包含许多关联实体的模型,你想在一次查询中, ...

  9. 《Entity Framework 6 Recipes》中文翻译系列 (26) ------ 第五章 加载实体和导航属性之延缓加载关联实体和在别的LINQ查询操作中使用Include()方法

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-7  在别的LINQ查询操作中使用Include()方法 问题 你有一个LINQ ...

随机推荐

  1. Python【day 15-2】基本数据类型-dict tuple set

    '''''' ''' 变量的数据类型 int str bool list 5.字典 dict 定义和写法:由{}表示,每个元素是key:value的键值对形式,元素间是逗号隔开 特点: 1.key是可 ...

  2. C++ message queue 消息队列入门

    说明:当我们有多个线程以不同的速度运行并且我们想要以特定的顺序从一个线程向另一个线程发送信息时,消息队列可能会有用. 这个想法是,发送线程将消息推送到队列中,而接收线程将消息按自己的步调弹出. 只要发 ...

  3. bacula备份工具

    源码下载:http://www.bacula.org bacula适合数据业务量巨大,每天都在迅速增长,还需要以tar打包方式进行低级备份而且没有异地容灾策略.Bacula是一个完美的增量备份功能,同 ...

  4. if语句,if...else语句的分析

    if语句的反汇编判断 if语句的反汇编判断基本是围绕JCC指令的,如果想要有深刻的理解,可以自行练习JCC指令 执行各类影响标志位的指令 jxx xxxx 1.案例一 mov eax,dword pt ...

  5. PHP将数组转字符串

    implode(',',$arr) //将数组转字符串 $arr = [ 'a'=>1, 'b'=>2, 'c'=>3, ]; $arr_string = implode(',',$ ...

  6. Git的使用(2)

    一.git在不同平台下的安装 (1)在linux上安装 如果以centos为例,可以使用yum安装,如下命令: sudo yum install git 如果你在基于debian的发行版上,尝试使用: ...

  7. SSDB数据库笔记

    目录 环境 配置文件 启动服务器 客户端 SSDB:一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis. 参考文献: SSDB官网 环境 win10 下 wsl 环境 ubun ...

  8. MASK-RCNN(1)

    MASK-RCNN是一个多用途的网络,可以用来做目标检测,实例分割或者人体姿态识别.主要结构如下. 简单的说,就是首先用Faster-RCNN获得ROI,再进行ROI Align,然后输出ROI的分类 ...

  9. pycharm添加断点,分段运行,以及继续运行;

    1.打断点,只需在代码的前面单机左键即可:2.运行,点击Debug...(如图,像贝壳一样的图标),只会运行第一个红点前的代码: 3.此时若想将第2个红点前的代码运行完毕:点击Resume Progr ...

  10. c# WF 第5节 窗体的控件

    本节内容: 1:控件在哪里 2:控件怎么添加 3:窗口的显示与隐藏 4:实例单击窗体,出现另一个窗体 1:控件在哪里 视图 --> 工具箱 2:控件怎么添加 第一种:从工具箱直接拉 第二种:在代 ...