c#EF中相关配置理解说明

88 阅读3分钟

WithMany() 调用时没有参数,可指示此方向没有导航 实体:HasMany正向导航配置

实体:WithOptional反向导航配置 有参数表示有导航属性,没有参数表示没有导航

Has方法:

  1. HasOptional:前者包含后者一个实例或者为null
  2. HasRequired:前者(A)包含后者(B)一个不为null的实例
  3. HasMany:前者包含后者实例的集合

With方法:

  1. WithOptional:后者(B)可以包含前者(A)一个实例或者null 在EF中, WithOptional()方法用于配置两个表之间的关系,其中一个表可以不存在,这种关系通常是可选的外部关系(optional relationship)。WithOptional()方法也有无参数和有参数的重载形式,二者的区别在于确定外键是否可以为空。 无参数的WithOptional()表示,两个表之间的关系是【可选关系】,即可以存在外键,也可以不存在外键,关系的方向是从【一侧到多侧】。

  2. WithRequired:后者包含前者一个不为null的实例, 无参数的WithRequired()表示这是一个【单向关系】,也就是在两个表之间设置了【导航属性】(navigation property)后,仅在一个表中存在外键列,而另一个表是没有外键列的。 有参数的WithRequired()表示【双向关系】,不仅在一个表中存在外键列,也在另一个表中存在外键列。在实现这种关系时,需要使用【双向的导航属性】,

  3. WithMany:后者包含前者实例的集合 在Entity Framework (EF)中, WithMany() 方法用于在关系中指定多重性,它用于定义一对多和多对多两种关系。 WithMany() 方法也有无参数和有参数的重载形式,二者的区别在于确定主键和外键之间的关系。 - 无参数的WithMany() 表示该关系中【多重性的一侧】将不包含任何相应实体参考引用的集合。例如,如果有一个博客实体类 Blog 和一个博客评论实体类 Comment,其中一个博客可以有多个评论,但评论不能引用多个博客,则可以使用以下方法:

和关系映射相关的方法:

基本套路this.Has(p=>p.A).With***() 当前这个表和A 属性的表的关系是Has 定义, With 定义的是A 对应的表和这个表的关系。 Optional/Required/Many

HasOptional() 有一个可选的(可以为空的)

HasRequired() 有一个必须的(不能为空的)

HasMany() 表示有很多个

WithOptional() 可选的,后者可以有一个前者或者没有 WithRequired() 必须的,就是后者必须有一个前者 WithMany() 很多的

在Entity Framework中,这些方法是用于配置实体之间的关系的。这些方法通常在Fluent API中使用,用于指定实体之间的关系,如一对一、一对多、多对一等。

  1. WithRequired:指定实体之间的关系为必需的,即一个实体必须存在一个关联实体。
  2. WithOptional:指定实体之间的关系为可选的,即一个实体可以有零个或一个关联实体。
  3. WithMany:指定实体之间的关系为多对一或多对多的关系。
  4. HasOptional:指定实体之间的关系为可选的,类似于WithOptional,但是HasOptional通常用于指定导航属性为可选的情况。
  5. HasRequired:指定实体之间的关系为必需的,类似于WithRequired,但是HasRequired通常用于指定导航属性为必需的情况。