首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

EF Core 导航属性配置

在上一篇,大概介绍了Entity Framework Core关于关系映射的逻辑。在上一篇中留下了EF的外键映射没有说,也就是一对一,一对多,多对一,多对多的关系等。...这一篇将为大家细细分析一下,如何设置这些映射。 1. 实体之间的关系 从数据表来考虑,两个表之前的关系有一对一,一对多(多对一)和多对多的关系。...其他数据库提示,外键不能为空。 所以也就是说EF不推荐这种双方互导航的一对一关系。...如果想在Single端设置,需要先用 HasMany表示要设置一个多对X的关系,然后调用WithOne 表示是多对一。如果是Many端,则必须先声明是HasOne。...,这个需要两方都配置一个多对一的映射,指向中间表。

3.3K20

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

如果类型不一致,EF则认为该类设置有误。如果没找到符合名称要求的属性,EF会自己添加一个外键属性。 对于一对一,EF要求导航属性双方都应该具有外键配置。 一对多,EF要求多的一方设置外键。...同时如果在一方这边设置了集合类型的导航属性,那么EF会自动到目标类里寻找外键属性。 说完了一对一和一对多,那么多对多呢? 如果没有声明的话, EF会生成一个中间表。 2....修改映射关系 EF允许开发人员指定自己的映射规则或者单个类的映射规则。EF 提供了几种方式来修改映射关系。 2.1 数据注解 EF允许开发人员通过使用Attribute标记,来约定映射关系。...class; 继续寻找 IEntityTypeConfiguration,看到这个接口只有一个方法: void Configure(EntityTypeBuilder builder); 两个都指向了...总结 在这一篇领着大家看了一下EF Core对于映射关系这一部分的内容,我留下了外键相关的FluentAPI介绍,我打算在下一篇介绍。因为这部分的内容比较麻烦,而且使用率也相当高。

2.8K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    EF 约定介绍

    当前环境为EF Code First开发模式中 一、EF默认约定 1、常用约定 (1)、当没有显示指定实体主键的时候,EF会默认将长得最像Id的属性(且类型为GUID)设为主键 (2)、设计实体时,当一个实体包含一个集合属性...,该集合属性里面的元素是另一个实体时,则默认未一对多关系,即使没有显示的指定一对多的关系,EF会默认的设置主外键(主从)关系 (3)、一对一的实体关系,需要手动设置主从关系 (4)、多对多无载荷关系实体...) Convention EF中,两个实体间的关系是通过导航属性的方式来实现,每一个对象都能拥有一个它所参与的关系的导航属性,导航属性提供了一种方式在两端来操作这个关系来获取我们需要的数据,可以返回任何一方的引用对象...关联实体的主键名 (3)、关联实体的主键名 注: (1)、当外键关系被检测到,Code First会根据外键的可空性来推断关系的具体形式;如果外键属性是可空的,那么关系会被设置为可选的,否则,关系就是必选的.... (2)、当关联实体的外键属性被设置为不为空,Code First会设置级联删除,反之不会。

    1.6K100

    01-EF Core笔记之创建模型

    }); //组合备用键 必填和选填 映射到数据库的必填和可空,在约定情况下,CLR中可为null的属性将被映射为数据库可空字段,不能为null的属性映射为数据库的必填字段。...在数据库中,数据表之间的关系可以分为一对一、一对多、多对多三种,在实体之间同样有这三种关系,但是EF Core仅支持一对一、一对多关系,如果要实现多对多关系,则需要通过关系实体进行关联。...modelBuilder.Entity() .HasOne(p => p.Blog) .WithMany(b => b.Posts) .IsRequired(); } 多对多的关系...多对多的关系需要我们定义一个关系表来完成。...Post { get; set; } public string TagId { get; set; } public Tag Tag { get; set; } } Blog和Tag是多对多的关系

    3.1K20

    数据库-库表设计 【分享一些库表设计经验】

    本文的核心内容:记录积累一些库表设计方案与技巧 数据库实体与实体间的对应关系 1)数据库表的菜单【分类】设计:如省市关联、图书的一、二级分类。...---- 实体与实体间的对应关系 一对一 一对一,一般用于对主表的补充。假设A表为用户信息表,存储了用户的姓名、性别、年龄等基本信息。用户的家庭住址信息也属于用户的基本信息。...一对多 一对多,是最常见的一种设计。就是 A 表的一条记录,对应 B 表的多条记录,且 A 的主键作为 B 表的外键。...多对多 构建一张关系表将两张表进行关联,形成多对多的形式。例如: 老师表、学生表;一个学生可以选修多个老师的课程、同时一个老师也可以教多个学生。...我们可以增加两个字段(deep,is_leaf)帮助我们更快的查询。 deep=1表示父节点,deep>1 表示子节点。

    1.5K30

    EF Core的增删改查

    咳咳,总而言之,使用配置文件利大于弊,所以我推荐使用配置文件对关系进行配置。 2. 数据变化 换句话说,嗯,也就是增删改。在数据增删这两方面,EF Core没有太多需要注意的地方。...而删除,如果在配置导航属性时,没有设置级联删除,删除当前元素,如果另一端的外键是可空类型的,并不会删除导航属性另一端的元素只会设置外键指向为NULL,如果另一端外键是不可空的,那么就会同时删除。...: 行为名称 对内存中的依赖项/子项的影响 对数据库中的依赖项/子项的影响 Cascade 删除实体 删除实体 ClientSetNull(默认) 外键属性设置为 null None SetNull 外键属性设置为...null 外键属性设置为 null Restrict None None 而对于不可为NULL的外键来说,枚举DeleteBehavior的值起以下作用: 行为名称 对内存中的依赖项/子项的影响 对数据库中的依赖项...如果使用的Linq表达式,则没关系,EF Core在遇到这种情况的时候,会把数据库里所有数据都加载到上下文中,再执行后续的查询等操作。

    3.2K20

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

    本文主要讲EF一对多关系和多对多关系的建立 一、模型设计器 1、一对多关系 右键设计器新增关联 导航属性和外键属性可修改 2、多对多关系 右键设计器新增关联 模型设计完毕之后,根据右键设计器根据模型生成数据库...references Student (Id) on delete no action on update no action 2、多对多(中间表双主键双外键) --双主键约束(多对多) alter...上面学生和老师的例子并不能很好的说明多对多有载荷的问题,所以换成订单和产品,所以链接表将会产生一个订单数量的载荷(也就是链接表多了一个标量属性), 模型设计图如下: 有载荷的多对多关系比无载荷的多对多关系更加的简介明了...如果你有一个无载荷的多对多关系时,你可以考虑通过增加一标识列将其改变为有载荷的多对多关系。...当你导入表到你的模型时,你将得到两个包含一对多关系的实体,这意味着,你的代码为将来有可能出现的多载荷做好了准备。增加一整型标识列的代价通常很小,但给模型带来了更大的灵活性。

    2.5K80

    ASP.NET MVC5高级编程——(3)MVC模式的模型

    个数: 主键只能有一个 一个表可以有多个外键 因为这个主外键属性对于理解后面的EF框架(ORM)很有帮助,所以这里我们多讲一些!...而称ArtistID属性为外键属性(foreign key),因为与模型对应的数据库中,专辑表(Album)和艺术家(Artist)表存在对应的外键关系,即ArtistID是Album表的外键!...新建的ASP.NET MVC5项目会自动包含对实体框架(EF)的引用。...模型对象中的属性如果设置为虚拟的,可以给EF提供一个指向C#类集的钩子(hook),并未EF启用了一些特性,如高效的修改跟踪机制(efficient change tracking mechanism)...可以根据这两个类的名称来辨别每个类所代表的策略。两个初始化器都需要一个泛型类型的参数,并且这个参数必须是DbContext的派生类。

    4.8K40

    EntityFramework Core 学习扫盲

    主键 默认情况下,EF CORE会将实体中命名为Id或者[TypeName]Id的属性映射为数据库表中的主键。当然有些开发者不喜欢将主键命名为Id,EF CORE也提供了两种方式进行主键的相关设置。...进一步说,如果属性是整数或是Guid类型,那么该属性将会被EF CORE设置为自动生成。这是EF CORE的语法糖之一。 那由用户手动设置呢?...备用键 备用键在之前的小节中已经提过,使用以下代码配置的列将自动设置为唯一标识列。...以下内容用代码的方式给出了一对一,一对多和多对多的关系,两边关系设为不可空。其实可空不可空的控制十分简单,只要注意是否需要加上IsRequired的扩展Api即可。...唯一需要注意的是,关系设置请从子端(如User和Blog呈一对多对应时,从Blog开始)开始,否则配置不慎容易出现多个外键的情况。

    9.6K90

    django 1.8 官方文档翻译:2-1-1 模型语法

    在哪个模型中设置 ManyToManyField 并不重要,在两个模型中任选一个即可 —— 不要两个模型都设置。 通常,ManyToManyField 实例应该位于可以编辑的表单中。...但是,有时你可能需要关联数据到两个模型之间的关系上。 例如,有这样一个应用,它记录音乐家所属的音乐小组。我们可以用一个ManyToManyField 表示小组和成员之间的多对多关系。...,要显式指定外键并关联到多对多关系涉及的模型。...对于通过中介模型与自己进行多对多关联的模型,允许存在到同一个模型的两个外键,但它们将被作为多对多关联关系的两个(不同的)方面。...使用中介模型定义与自身的多对多关系时,你必须设置 symmetrical=False(详见模型字段参考)。

    5K20

    C#学习笔记—— 常用控件说明及其属性、事件

    数组中的每个元素表示以此窗体作为父级的多文档界面(MDI)子窗体。 (27)MdiParent属性:用来获取或设置此窗体的当前多文档界面(MDI)父窗体。...这时称包含控件的控件为容器控件或父控件,而父控件称为子控件。这时将遇到一个问题,即子控件与父控件的位置关系问题,即当父控件的位置、大小变化时,子控件按照什么样的原则改变其位置、大小。...当把此属性值设置为字符串值时,ListBox 控件将在列表内搜索与指定文本匹配的项并选择该项。若在列表中选择了一项或多项,该属性将返回第一个选定项的文本。...(2)SetSelected方法:用来选中某一项或取消对某一项的选择,调用格式及功能如下。...(2)IsMdiContainer属性:该属性用来获取或设置一个值,该值指示窗体是否为多文档界面(MDI)子窗体的容器,即MDI父窗体。

    9.9K20

    SqlAlchemy 2.0 中文文档(二十三)

    ### 使用外键 ON DELETE 处理多对多关系 正如在使用级联删除处理多对多关系中描述的那样,“删除”级联也适用于多对多关系。...另见 使用 ORM 关系的外键 ON DELETE 级联 使用多对多关系的级联删除 delete-orphan 使用多对多关系的级联删除 cascade="all, delete"选项与多对多关系同样适用...### 使用外键 ON DELETE 处理多对多关系 如 使用级联删除处理多对多关系 中所述,“delete”级联也适用于多对多关系。...以下示例将多对多的示例调整为示例,以说明在关联的一侧上设置 cascade="all, delete"。...在多对多关系中使用外键 ON DELETE 如使用 delete cascade 与多对多关系所述,“delete”级联也适用于多对多关系。

    28710

    SqlAlchemy 2.0 中文文档(十一)

    一对多 一对多关系在子表上放置一个引用父表的外键。...如果我们希望 Parent.child 是可空的多对一关系,我们可以将 Parent.child_id 和 Parent.child 都设置为 Optional[],在这种情况下,配置将如下所示: from...根据需要,将注意到注释和非注释/命令式样式之间的其他差异。 一对多 一对多关系在子表上放置一个外键,引用父表。...如果我们想要 Parent.child 成为一个可为空的多对一关系,我们可以将 Parent.child_id 和 Parent.child 都设置为 Optional[],在这种情况下,配置将如下所示...另请参阅 在多对多关系中使用级联删除 在多对多关系中使用外键 ON DELETE 设置双向多对多 对于双向关系,关系的两端都包含一个集合。

    23610

    MyBatis 从入门到精通:多对一处理

    多对一处理 摘要 多对一关系在数据库设计中很常见,它描述了多个子记录对应到一个父记录的情况。本文将深入探讨多对一关系的概念、实现方式以及在MyBatis中的应用。...引言 在数据库设计中,多对一关系是一种常见的关系类型,通常用来描述多个子记录与一个父记录之间的关联关系。例如,在学生和老师的关系中,多个学生可以对应到同一个老师,这就是一种多对一关系。...在本文中,我们将学习如何在数据库中建模和处理多对一关系,并通过实例演示在MyBatis中的实现方式。 正文内容 多对一关系概述 多对一关系描述了多个子记录对应到一个父记录的情况。...答:多对一关系描述了多个子记录对应到一个父记录的情况,通常通过外键来实现。...,并通过结果映射进行转换 总结 多对一关系在数据库设计中很常见,通过合适的实体设计和MyBatis查询方式,我们能够轻松处理多对一关系,为应用程序的开发提供便利。

    8800

    SqlAlchemy 2.0 中文文档(十三)

    在不删除的情况下删除集合涉及将外键列设置为 NULL 以进行一对多关系,或者删除相应的关联行以进行多对多关系。...这些对象将需要与父对象解除关联,对于一对多集合,这意味着外键列将被设置为 NULL,或者根据 级联 设置,可能希望为这些行发出 DELETE。...不删除的集合移除涉及将外键列设置为 NULL(对于一对多关系)或删除相应的关联行(对于多对多关系)。...在不删除的情况下移除集合涉及将外键列设置为 NULL(对于 一对多 关系)或删除相应的关联行(对于 多对多 关系)。...这些对象将需要从父对象中取消关联,对于一对多集合,这意味着外键列将被设置为 NULL,或者根据 级联 设置,可能希望对这些行发出 DELETE。

    21910

    Laravel源码分析之模型关联

    、父模型、两个模型的关联字段、和关联的约束。...$this->ownerKey, '=', $this->child->{$this->foreignKey}); } } } 定义一对多的反向关联时也是一样设置了父模型、子模型...多对多 多对多关联不同于一对一和一对多关联它需要一张中间表来记录两端数据的关联关系,官方文档里以用户角色为例子阐述了多对多关联的使用方法,我们也以这个例子来看一下底层是怎么来定义多对多关联的。...与此同时给关联关系设置了join和where约束,以User类里的多对多关联举例, performJoin方法为其添加的join约束如下: $query->join('role_user', 'roles.id...ID => [子模型1, ...]]的字典 $dictionary = $this->buildDictionary($results); //将子模型设置到父模型的$

    9.6K10
    领券