• 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

    多对多的关系无法通过两个实体直接关联,可以借助第三个实体来关联两个多对多的实体。

     

  • 相关阅读:
    工作
    失败
    理想和一些未来的计划
    安静
    重新开始
    如何度过周末
    放假
    WPF学习笔记-数据采集与监控项目01-登录界面
    VS2017-断点感叹号问题,调试代码显示“当前无法命中断点,还没有为该文档加载任何符号”
    WPF-MVVM模式-表现层的UI框架【学习笔记】
  • 原文地址:https://www.cnblogs.com/Terrece/p/8029625.html
Copyright © 2020-2023  润新知