首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C# 数据操作系列 - 6 EF Core 配置映射关系

    如果类型不一致,EF则认为该类设置有误。如果没找到符合名称要求的属性,EF会自己添加一个外键属性。 对于一对一,EF要求导航属性双方都应该具有外键配置。 一对多,EF要求多的一方设置外键。...同时如果在一方这边设置了集合类型的导航属性,那么EF会自动到目标类里寻找外键属性。 说完了一对一和一对多,那么多对多呢? 如果没有声明的话, EF会生成一个中间表。 2....[InverseProperty("Author")] 用在集合类型的属性上,表示该集合属性是与源类哪一个导航属性相关。...2.2 Fluent 方式 当我们使用这种方式的时候,会面临一个问题:是新建一个配置类呢,还是在 EF上下文的OnModelCreating方法里统一配置呢?...API配置类的关键。

    3.2K21

    EntityFramework Core 学习扫盲

    少数的几个CLR类型在不做处理的情况下,映射到数据库中时将存在可空选项,如string,int?,这种情况也在下列方式中做了说明。...EF CORE在Data Annotations和Fluent Api形式上为开发者分别提供了三种方法。...常见的关系有1-1,1-n,n-n,除此以外,关系的两边还有可空不可空的控制。那么在EF CORE中,我们怎么实现这些关系呢?...以下内容用代码的方式给出了一对一,一对多和多对多的关系,两边关系设为不可空。其实可空不可空的控制十分简单,只要注意是否需要加上IsRequired的扩展Api即可。...唯一需要注意的是,关系设置请从子端(如User和Blog呈一对多对应时,从Blog开始)开始,否则配置不慎容易出现多个外键的情况。

    10.2K90

    EF Core 导航属性配置

    在上一篇,大概介绍了Entity Framework Core关于关系映射的逻辑。在上一篇中留下了EF的外键映射没有说,也就是一对一,一对多,多对一,多对多的关系等。...实体之间的关系 从数据表来考虑,两个表之前的关系有一对一,一对多(多对一)和多对多的关系。 其中一对一,指的是表A有一条记录对应着表B最多有一条记录与之对应。...所以我们必须手动在导航属性的一侧实体类里配置外键,并用 HasForeignKey指定。(如果不使用Fluent API,也是需要在一端实体类配置外键,另一端则不需要)。...其他数据库提示,外键不能为空。 所以也就是说EF不推荐这种双方互导航的一对一关系。...在EF 6中 中间表可以仅存在于关系中,但是在EF Core3 还没有这个的支持。也就是当前文章使用的版本。 5. 附加 在EF的外键约束中,导航属性是默认可空的。

    3.8K20

    01-EF Core笔记之创建模型

    如果你想改变默认值,很简单,EF Core提供了Fluent API或Data Annotations两种方式允许我们定制数据模型。...,在约定情况下,CLR中可为null的属性将被映射为数据库可空字段,不能为null的属性映射为数据库的必填字段。...也就是说,如果能为null,则默认都是可空字段,因此在配置时,只需要配置是否为必填即可。 数据标注方式使用Required特性进行标注。...使用乐观的并发控制可提高数据库性能。 按照约定,EF Core不会设置任何并发控制的令牌字段,但是我们可以通过Fluent API或数据标注进行配置。...在数据库中,数据表之间的关系可以分为一对一、一对多、多对多三种,在实体之间同样有这三种关系,但是EF Core仅支持一对一、一对多关系,如果要实现多对多关系,则需要通过关系实体进行关联。

    3.6K20

    EF 约定介绍

    当前环境为EF Code First开发模式中 一、EF默认约定 1、常用约定 (1)、当没有显示指定实体主键的时候,EF会默认将长得最像Id的属性(且类型为GUID)设为主键 (2)、设计实体时,当一个实体包含一个集合属性...,该集合属性里面的元素是另一个实体时,则默认未一对多关系,即使没有显示的指定一对多的关系,EF会默认的设置主外键(主从)关系 (3)、一对一的实体关系,需要手动设置主从关系 (4)、多对多无载荷关系实体...关联实体的主键名 (3)、关联实体的主键名 注: (1)、当外键关系被检测到,Code First会根据外键的可空性来推断关系的具体形式;如果外键属性是可空的,那么关系会被设置为可选的,否则,关系就是必选的.... (2)、当关联实体的外键属性被设置为不为空,Code First会设置级联删除,反之不会。...5、复杂类型约定(Complex Types Conventions) 如果Code First无法从类型中推测出主键,也没有通过Data Annotations或者Fluent Api进行注册的主键,

    2.1K100

    EF Core 入门

    0.前言 上一章简单介绍了一下ORM框架,并手写了一个类似ORM的工具类。这一章将介绍一个在C#世界里大名鼎鼎的ORM框架——Entity Framework的Core版。...可以延迟加载需要的数据,外键引用属性、查询结果等 丰富的映射关系,支持一对一,一对多,多对多,甚至继承、单表多实例等 可以使用Linq 进行查询 非Core版的可以通过数据库表生成实体类,两种都可以通过实体类生成表...EF可以使用Fluent式配置,也可以使用配置文件进行配置。 说了一大堆Entity Framework的优点,那么就让我们开始使用Entity Framework Core吧。...因为EF更多的是基于.NET Framework开发的,所以微软以EF为基础针对.net core做了一定的修改,然后EF Core诞生了。可以说EF Core是专门为.net core开发的。..." PRIMARY KEY AUTOINCREMENT, "Name" TEXT NULL, "ModelAId" INTEGER NOT NULL, CONSTRAINT "FK_ModelBs_ModelAs_ModelAId

    3.3K10

    EF基础知识小记四(数据库=>模型设计器)

    EF基础知识小记三(设计器=>数据库)介绍了如何创建一个空设计器模型,并如何将模型同步到数据库的表中,本文则主要介绍如何将一个存在的数据库同步到模型设计器中。...clustered (Id Asc) alter table Teacher add constraint [PK_Teacher] primary key clustered (Id Asc) --双主键约束(多对多...] foreign key (TeacherId) references Teacher (Id) on delete no action on update no action --但外键约束(一对多...(Id) on delete no action on update no action 1、看过EF基础知识小记三(设计器=>数据库)后,省去一些简单的操作步骤,直接到下面这步操作 ?...根据数据库生成edmx 2、选择指定的数据库,并选择响应的表生成edmx模型设计器 3、点击确认,生成成功,如下图: ?  4、增删查该的操作和EF基础知识小记三(设计器=>数据库)介绍的一样

    733100

    EF基础知识小记五(一对多、多对多处理)

    本文主要讲EF一对多关系和多对多关系的建立 一、模型设计器 1、一对多关系 右键设计器新增关联 导航属性和外键属性可修改 2、多对多关系 右键设计器新增关联 模型设计完毕之后,根据右键设计器根据模型生成数据库...,就能生成对应的表之间的一对多和多对多关联 二、代码层面 建表语句如下: --建表脚本 create table Student ( Id int not null, Name varchar...(通过外键) --但外键约束(一对多) alter table InfoCard add constraint [FK_InfoCard_Student] foreign key (StudentId)...] foreign key (TeacherId) references Teacher (Id) on delete no action on update no action 生成对应的一对多和多对多关联的表之后...因为实体框架不支持在关联上附加载荷,所以有载荷的联结将会生成一个新的实体. 因为这个附加的载荷,Order需要通过OrderItem来获取与其关联的Product的项.

    2.6K80

    模型

    DateField # 时间,参数同date TimeField # 日期时间字段,格式 YYYY-MM-DD HH:MM:ss[.uuuuuu],相当于Python中的datetime.datetime...,表示允许为空,默认值是False null # 如果为True,则该字段允许为空白,默认值是False blank # 字段的名称,如果未指定,则使用属性的名称 db_column # 若值为True...auto_now_add # (时间字段独有)配置上auto_now=True,每次更新数据记录的时候会更新该字段。...auto_now 外键字段: # 一对一 OneToOneField # 一对多 ForeignKey # 多对多 ManyToManyField title = models.ForeignKey...null(前提FK字段需要设置为可空) models.SET_NULL # 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值) models.SET_DEFAULT # 删除关联数据

    41630

    Entity Framework 约定

    在这里约定只是记本规则,我们可以通过Data Annotaion或者Fluent API来进一步配置模型。...API 来忽略指定的模型映射到数据库中,代码写在EF上下文中: protected override void OnModelCreating(DbModelBuilder modelBuilder)...当EF检测出外键属性后,会根据外键属性是否为空来判断关系,如果外键可以为空,那么模型之间的关系将会配置成可选的,Code First 不会再关系上配置级联删除。...,并且没有通过Data Annotations 或者Fluent API进行手动配置主键时,该模型将会自动被配置为复杂类型,检测复杂类型时要求该类型没有引用实体类型的属性。...自定义约定相对来说比Fluent API 要简单,只需一行代码即可解决。

    1.6K10

    Django之ORM字段和参数

    关系字段 ---- ForeignKey     外键类型在ORM中用来表示外键关联关系,一般把ForeignKey字段设置在 '一对多'中'多'的一方。    ...---- OneToOneField    一对一字段。通常一对一字段用来扩展已有字段。 ---- ManyToManyField    用于表示多对多的关联关系。...---- auto_now    配置上auto_now=True,每次更新数据记录的时候会更新该字段。 ForeignKey参数 ---- to       设置要关联的表。...null(前提FK字段需要设置为可空) models.SET_DEFAULT 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值) models.SET 删除关联数据,  与之关联的值设置为指定值...---- related_query_name 同ForeignKey字段。 ---- symmetrical               仅用于多对多自关联时,指定内部是否创建反向操作的字段。

    3K60

    ORM常用字段介绍

    关系字段 ForeignKey 外键类型在ORM中用来表示外键关联关系,一般把ForeignKey字段设置在 '一对多'中'多'的一方。...null(前提FK字段需要设置为可空) models.SET_DEFAULT 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值) models.SET 删除关联数据, a....OneToOneField 一对一字段。 通常一对一字段用来扩展已有字段。 字段参数 to 设置要关联的表。 to_field 设置要关联的字段。 on_delete 同ForeignKey字段。...ManyToManyField 用于表示多对多的关联关系。在数据库中通过第三张表来建立关联关系。 字段参数 to 设置要关联的表 related_name 同ForeignKey字段。...related_query_name 同ForeignKey字段。 symmetrical 仅用于多对多自关联时,指定内部是否创建反向操作的字段。默认为True。

    3.3K10

    MySQL数据查询之多表查询

    ,如果被DEFAULT约束的位置没有值,那么这个位置将会被DEFAULT的值填充 表与表之间的联系 1.表关系分类:   总体可以分为三类: 一对一 、一对多(多对一) 、多对多 2.如何区分表与表之间是什么关系...#分析步骤: #多对一 /一对多 #1.站在左表的角度去看右表(情况一) 如果左表中的一条记录,对应右表中多条记录.那么他们的关系则为 一对多 关系.约束关系为:左表普通字段, 对应右表foreign...这种关系需要定义一个这两张表的[关系表]来专门存放二者的关系 相关分析 3.建立表关系 1.一对多关系  例如:一个人可以拥有多辆汽车,要求查询某个人拥有的所有车辆。  ...其他示例 2.一对一关系 例如:一个中国公民只能有一个身份证信息 分析: 一对一的表关系实际上是 变异了的 一对多关系....通过在从表的外键字段上添加唯一约束(unique)来实现一对一表关系.

    9.1K20

    MySQL之多表查询

    ,如果被DEFAULT约束的位置没有值,那么这个位置将会被DEFAULT的值填充   九.表与表之间的关系 1.表关系分类:   总体可以分为三类: 一对一 、一对多(多对一) 、多对多 2.如何区分表与表之间是什么关系...#分析步骤: #多对一 /一对多 #1.站在左表的角度去看右表(情况一) 如果左表中的一条记录,对应右表中多条记录.那么他们的关系则为 一对多 关系.约束关系为:左表普通字段, 对应右表foreign...这种关系需要定义一个这两张表的[关系表]来专门存放二者的关系 3.建立表关系 1.一对多关系  例如:一个人可以拥有多辆汽车,要求查询某个人拥有的所有车辆。  ...例子3:....  2.一对一关系  例如:一个中国公民只能有一个身份证信息  分析: 一对一的表关系实际上是 变异了的 一对多关系....通过在从表的外键字段上添加唯一约束(unique)来实现一对一表关系. ?

    8.9K130

    EF Core 数据验证

    Core 中并没有 Fluent API 模式对数据进行验证,因此我们只能通过 Data Annotations (数据注解)方式来进行数据验证,也就是添加特性的方法来验证数据。...例如我们要验证 User 模型中的 Name 的长度,Name 长度不能大于 5 ,我们只需在 Name 属性上增加 StringLength 数据注解即可, StringLength 位于命名空间 System.ComponentModel.DataAnnotations...在业务代码中我们调用前面定义的 ExecuteValidation 方法进行验证,如果验证通过就调用 EF Core 的 SaveChange() 方法,如果未通过就调用相应的处理代码,代码片段如下:...一、第三方扩展模型验证 前面所讲的是通过数据注解的方式来进行数据验证的,但是如果是使用 Fluent API 的方式就没办法解决文章开头所说的问题,因为Fluent API 模式并没有提供对数据模型的验证...二、总结 本篇文章讲解了 EF Core 数据验证的方法,虽然讲的时 EF Core 的方法,但是同样也适用于 EF6 ,这些内容是常用的,上述部分代码可以在大部分项目中通用。

    1.4K20

    MySQL之表的约束

    KEY (FK) 标识该字段为该表的外键 NOT NULL 标识该字段不能为空 UNIQUE KEY (UK) 标识该字段的值是唯一的 AUTO_INCREMENT 标识该字段的值自动增长...二 not null与default 是否可空,null表示空,非字符串 not null - 不可空 null - 可空...如果步骤1和2同时成立,则证明这两张表时一个双向的多对一,即多对多,需要定义一个这两张表的关系表来专门存放二者的关系 #一对一: 如果1和2都不成立,而是左表的一条记录唯一对应右表的一条记录,反之亦然...这种情况很简单,就是在左表foreign key右表的基础上,将左表的外键字段设置成unique即可 三 建立表之间的关系 #一对多或称为多对一 三张表:出版社,作者信息,书 一对多(或多对一):一个出版社可以出版多本书...id外键到丈夫表的id #多对多 三张表:出版社,作者信息,书 多对多:一个作者可以写多本书,一本书也可以有多个作者,双向的一对多,即多对多    关联方式:foreign key+一张新的表 ===

    5.1K60
    领券