• 10.01.2021
    • A

    • o

    • L

    • h

    • s

本文 内容

键 充当 每个 实体 实例 的 唯一 标识符。 EF 中 的 大多数 实体 都有 一个 键 , 此 键 映射 到 关系 数据库 中主 键的 概念 (对于 没有 键 的 实体 , 请 参阅 无 键 实体)。 实体 可以 有 超过主 键 的 其他 键 (参阅 备用 键 以 获取 详细 信息)。

配置 主 键

按照 约定 , 将 名为 Id 或 的 属性 <nume tip> Id 配置 为 实体 的 主 键。

clasa interna Car {public string Id {get; a stabilit; } sir public Make {get; a stabilit; } sir public Model {get; a stabilit; }} clasa interna Truck {public string TruckId {get; a stabilit; } sir public Make {get; a stabilit; } sir public Model {get; a stabilit; }}

备注

拥有 的 实体 类型 使用 不同 的 规则 来 定义 密钥。

可以 将 单个 属性 配置 为 实体 的 主 键 , 如下 所示 :

  • 数据 批注
  • API fluent

clasa interna Car {[Cheie] sir public LicensePlate {get; a stabilit; } sir public Make {get; a stabilit; } sir public Model {get; a stabilit; }}

你 还 可以 将 多个 属性 配置 为 实体 的 键 , 这 称为 组合 键。 复合 密钥 只能 使用 熟知 的 API 进行 配置; 约定 将 永远 不会 设置 组合 键 , 你 不能 使用 数据 批注 来 配置 它。

override protected void OnModelCreating (ModelBuilder modelBuilder) {modelBuilder.Entity <Car> () .HasKey (c => new {c.State, c.LicensePlate}); }

创造 价值

对于 非 复合 数字 和 GUID 主 键 , EF Core 会 按 约定 为 你 设置 值 生成。 例如 , SQL Server 中 的 数字 主 键 将 自动 设置 为 标识 列。 有关 信息 , 请 参阅 有关 值 生成 的 文档。

主 键 名称

按照 约定 , 使用 名称 创建 关系 数据库 主 键 PK_ <nume tip>。 可以 按 如下 所示 配置 cheie primara 约束 的 名称 :

override protected void OnModelCreating (ModelBuilder modelBuilder) {modelBuilder.Entity <Blog> () .HasKey (b => b.BlogId) .HasName (“PrimaryKey_BlogId”); }

键 类型 和 值

虽然 EF Core 支持 使用 任何基 元 类型 的 属性 作为 主 键 (包括 string 、 Guid 和 其他 类型) , , byte [] 并不是 所有 数据库 都 支持 将 所有 类型 作为 键。 某些 情况 下 , 可以 自动 将 键值转换 为 支持 的 类型 , 否则 应 手动 指定 转换。

在 将 新 实体 添加 到 上下文 时 , 键 属性 必须 始终 具有 默认 值 , 但 某些 类型 将 由 生成。 在 这种 情况 下 , 当 添加 实体 进行 跟踪 时 , EF 会 尝试 生成 一个 临时 值。 在 调用 调用SaveChanges 后 , 临时 值 将 替换 为 数据库 生成 的 值。

重要

如果 某个 键 属性 的 值 由 数据库 生成 , 而 在 添加 实体 时 指定 了 一个 非 默认 值 , 则 EF 将 假定 该 实体 在 数据库 中 已 存在 , 并且 将 尝试 进行 更新 而 不是 插入 一个 新 的 值。若要 避免 此 情况 , 请 关闭 值 生成 或 参阅 如何 指定 生成 的 属性 的 显 式 值。

备用 键

除了 主 键 外 , 备用 键 还 可用作 每个 实体 实例 的 替代 唯一 标识符; 它 可用作 关系 的 目标。 当 使用 关系 数据库 时 , 这 将 映射 到) 的 替代 键 (列 上 的 唯一 索引 / 约束的 概念 , 以及 引用 () 的 列 的 一个 或 多个 cheie straina 约束。

提示

如果 只是 想要 在 列 上 强制 唯一 性 , 请 定义 唯一 索引 而 不是 备用 键 (参阅 索引)。 在 EF 中 , 备用 键 为 只读 , 并 在 唯一 索引 之上 提供 附加 语义 , 因为 它们 可用作 外键 的 目标。

通常 会 在 需要 时 为 您 引入 备用 密钥 , 而不 需要 手动 配置 按照 按照 约定 , 当 您 的 的 属性 不是 作为 关系 目标 的 主 键 时 , 将为 您 引入 备用 密钥。

clasa interna MyContext: DbContext {public DbSet <Blog> Bloguri {get; a stabilit; } public DbSet <Post> Postari {get; a stabilit; } protected override void OnModelCreating (ModelBuilder modelBuilder) {modelBuilder.Entity <Post> () .HasOne (p => p.

porno jovencitas españolas porno xxxxx
megacorridas follando abuelas
tangas xxx porno incesto italiano
porno suizo incesto italiano porno
follando a mi compañera de piso follada a traicion
porno flash chochitos jovenes
porno casero en españa españolas amater
orgias amateur realincest
videos culos follando en silencio
enanas porno maduras gordas desnudas
pajas de madres videos de sexo en español
porno con abuelas pollas peludas
sexo gratis hijo viola a su madre porno
parejas liberales españolas comic porno en español
pono gay venezolanas maduras
abuelas sexi videos gays argentinos
porno sin censura maduras sensuales
incesto lesbianas me gusta follar
putas vic buenas pajas

Blog) .WithMany (b => b.Posts) .HasForeignKey (p => p.BlogUrl) .HasPrincipalKey (b => b.Url); }} public class Blog {public int BlogId {get; a stabilit; } public string Url {get; a stabilit; } public list <Post> Postari {get; a stabilit; }} public class Post {public int PostId {get; a stabilit; } sir public Titlu {get; a stabilit; } sir public Continut {get; a stabilit; } public string BlogUrl {get; a stabilit; } public Blog Blog {get; a stabilit; }}

你 还 可以 将 单个 属性 配置 为 备用 密钥 :

override protected void OnModelCreating (ModelBuilder modelBuilder) {modelBuilder.Entity <Car> () .HasAlternateKey (c => c.LicensePlate); }

你 还 可以 将 多个 属性 配置 为 替代 密钥 , (称为 复合 备用 键) :

override protected void OnModelCreating (ModelBuilder modelBuilder) {modelBuilder.Entity <Car> () .HasAlternateKey (c => new {c.State, c.LicensePlate}); }

最后 , 按照 约定 , 为 替代 键 引入 的 索引 和 约束 将 被 命名 为 AK_ <nume tip> _ <nume proprietate> (, 以便 复合 备用 键 <nume proprietate> 成为) 的 属性 名称 列表。 您 可以 配置 备用 密钥的 index 和 unique 约束 的 名称 :

override protected void OnModelCreating (ModelBuilder modelBuilder) {modelBuilder.Entity <Car> () .HasAlternateKey (c => c.LicensePlate) .HasName (“AlternateKey_LicensePlate”); }