在 EF 核心中具有唯一性的备用键和 HasIndex 之间的真正区别是什么?

Men*_*yus 6 c# indexing key relational-database entity-framework-core

我对这之间的真正区别很感兴趣

e.HasIndex(c => new { c.UserId, c.ApplicationId, c.Value }).IsUnique();
Run Code Online (Sandbox Code Playgroud)

和这个

e.HasAlternateKey(c => new { c.UserId, c.ApplicationId, c.Value });
Run Code Online (Sandbox Code Playgroud)

在 EF 核心流畅的 api 配置中。

这里的用例是我们有一个 PK,Id然后我们有一个辅助(备用键),它是一个复合键,它由以下属性构建:UserID ApplicationIdValue. 关于我的问题,我发现的唯一一件事是以下引述:https : //www.learnentityframeworkcore.com/configuration/fluent-api/hasindex-method

“虽然在大多数实际方面都相似,但这与在列上创建唯一约束不同,这可以通过在属性上创建备用键来实现。”

我真的不明白这种差异的概念,我也不知道唯一约束和唯一索引之间的区别。

如果有人可以向我解释定义(以及它们之间的区别),我将不胜感激。

小智 14

来自官方文档

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

换句话说 - 两者都创建唯一索引,但备用键具有一些附加属性(例如可以用作外键的目标)