Entity Framework Core 之Modeling Relationships
Relationships (关系)
关系定义了两个实体之间的联系,在数据库关系中用外键约束来表示两个实体之间的联系。默认情况下若在模型类型中发现了导航属性就会创建关系。最常见的关系模式是导航属性定义两端的关系,外键属性定义两者之间的依赖。
1) 术语定义
Dependent entity:依赖实体,包含外键属性的实体,在关系中称为孩子的一方
Principal entity:主体实体,包含主键/候补键的实体,在关系中成为父亲的一方
Foreign key:外键,在依赖实体中的属性,用于存储主体实体中的主键值
Principal key:主体键,在主体实体中唯一属性,用于存储主键或候补键
Navigation property:导航属性,在主体或依赖体重定义的属性,用于关联两者
Collection navigation property:集合导航属性,引用多个实体集合的导航属性
Reference navigation property:参考导航属性,引用单个实体的导航属性
Inverse navigation property:逆导航属性,在主体与依赖体中互相导航的属性
下面代码展示了Blog模型对象类与Post类之间一对多的关系
Post 是一个依赖实体
Blog 是一个主体实体
Post.BlogId 是一个外键
Blog.BlogId 是一个主体键 (在此更多代表的是主键,而非候补键)
Post.Blog是一个reference navigation property
Blog.Posts是一个 collection navigation property
Post.Blog 是 the inverse navigation property of Blog.Posts
2) 完全定义的关系(Fully Defined Relationships)
最普通的关系模式是在两个关系实体中都定义导航属性互相导航,且在依赖实体类中定义外键属性。当在两个实体中定义导航属性,则互为逆向导航;当依赖实体类中包含以下格式的属性时<primary key property name>,<navigation property name><primary key property name>, or<principal entity name><primary key property name>都将此类属性默认为外键属性。
3) 没有外键的属性(No Foreign Key Property)
可在一个依赖实体中定义一个外键属性且非必需的。若没有发现外键属性,一个引用外键属性将被同样定义<navigation property name><principal key property name>
4) 单向导航属性(Single Navigation Property)
当只有一个导航属性,没有逆向导航和外键属性时,可选择单个导航属性。单向导航属性存在时,可以使用它Fluent API来标志两者关系。
5) 关系之间的Data Annotations
在关系中可以用2种数据特性来标识关系,分别是[ForeignKey] and [InverseProperty]
以下是通过ForeignKey来标识导航属性的外键
通过逆向导航数据特性来标识主体实体和依赖实体之间的导航信息[InverseProperty]
6) 关系之间的Fluent API
通过导航属性识别的关系,用HasOne or HasMany标识需要配置的导航属性,然后通过WithOne or WithMany继续链接来配置逆向导航属性
One-to-One Relationship
1:1的关系在两个关联实体中分别都有一个关联导航属性,但是在依赖实体中必须显式有一个外键属性来标识,另一个则是主体实体
Many-To-Many Relationship
多对多的关系无法通过两个实体直接关联,可以借助第三个实体来关联两个多对多的实体。
转载于:https://www.cnblogs.com/Terrece/p/8029625.html
Entity Framework Core 之Modeling Relationships相关推荐
- “幕后英雄”之Backing Fields【Microsoft Entity Framework Core随笔】
刘德华 有一首歌叫<马桶>,其中有一句歌词是:每一个马桶都是英雄. EFCore也有一个英雄,在幕后默默地任劳任怨.它就叫 "支持字段" (Backing Fields ...
- Entity Framework Core 2.0的新特性
虽然EF Core 2.0存在大量槽点,但是它也给出了不少亮点.在本文中,我们将介绍这次发布版的部分亮点. \\ 数据库表切分(Table Splitting) \\ ORM常被吐槽是总是对所请求数据 ...
- ABP官方文档翻译 9.2 Entity Framework Core
Entity Framework Core 介绍 DbContext 配置 在Startup类中 在模块PreInitialize方法中 仓储 默认仓储 自定义仓储 应用程序特定基础仓储类 自定义仓储 ...
- Entity Framework Core 2.0 使用入门
本文转载自作者:晓晨Master(李志强) 原文章地址 https://www.cnblogs.com/stulzq/p/7717873.html 一.前言 Entity Framework(后面简称 ...
- Entity Framework Core介绍(1)
介绍 Entity Framework (EF) Core 是轻量化.可扩展和跨平台版的常用 Entity Framework 数据访问技术. EF Core 可用作对象关系映射程序 (O/RM),以 ...
- oracle精简版_使用Entity Framework Core访问数据库(Oracle篇)
前言 哇..看看时间 真的很久很久没写博客了 将近一年了. 最近一直在忙各种家中事务和公司的新框架 终于抽出时间来更新一波了. 本篇主要讲一下关于Entity Framework Core访问ora ...
- 在 .NET Core 中如何让 Entity Framework Core 在日志中记录由 LINQ 生成的SQL语句
在开发中,我们想在调试中查看EF Core执行的sql语句,可以使用SQL Studio Manager Tools工具,另一种方式是使用EF Core提供的日志.在ASP.NET Core使用Ent ...
- Entity Framework Core 6.0 预览4 性能改进
起因 微软在Build2021开发者大会上,发布Entity Framework Core 6.0(简称EFCore 6)预览第四版,号称是性能版本,性能提升主要对于Entity Framework ...
- Entity Framework Core 5中实现批量更新、删除
本文介绍了一个在EntityFramework Core 5中不需要预先加载数据而使用一句SQL语句批量更新.删除数据的开发包,并且分析了其实现原理,并且与其他实现方案做了比较. 一.背景 随着微软全 ...
最新文章
- 如何安装python3.7.4_银河麒麟安装Python3.7.4以及升级自带OpenSSL
- CentOS7下搭建Nginx+PHP7的安装配置
- 克隆可序列化和不可序列化的Java对象
- java 数据结构详解,数组,集合,HashMap
- java注解中可使用对象_Java注解(二):实战 - 直接使用对象列表生成报表...
- Sql server 2005 中的dense_rank()函数的应用
- 交叉验证选择最佳参数_如何为您的公司选择最佳的身份验证即服务提供商
- 查看ssis执行日志_SSIS包日志记录概述
- 大白话讲高项高频知识点(在线更新)
- 中国栓塞线圈市场趋势报告、技术动态创新及市场预测
- cf烟雾头怎么调win7系统
- HDU1285 确定比赛名次【拓扑排序】
- 二叉树前中后序遍历的口诀
- codesys 串口通讯实例_CodeSys如何实现串口通信
- (方法总结)Python 一行代码提取字符串每个单词首字母的两种方法
- selenium、you-get下载B站视频、监控播放量和弹幕
- 人事管理系统 v4.1.8(源码)
- Ubuntu12.04搭建BigBlueButton
- 淘宝运营 促销活动的2种 互动型和大促让利型
- SQL 注入漏洞检测与利用
热门文章
- 阿里云安装部署Oracle11g 详细教程
- 揭秘udesk智能质检:质检+分析双剑合璧
- 20190121——不羡神仙 Java设计模式
- HUELOJ 1109: 打印数字图形(函数专题)
- c语言程序设计植树,C语言程序设计100例之(19):欢乐的跳
- 固态硬盘能提高服务器内存吗,内存涨疯了!固态硬盘能替代内存吗?
- 【笔记】大明王朝的七张面孔
- 小孔成像总结_【初中物理】物理解题技巧+方法总结
- 数据的处理方法及触摸屏终端
- 服务器2012系统修复,windows2012R2: sfc /scannow,错误:资源保护无法启动修复服务 - Microsoft Community...