【发布时间】:2022-01-13 21:52:13
【问题描述】:
对于实体框架,当我们在实体上有一个主键时,EF 总是会生成一个聚集索引。
public class TestEntity
{
[key]
public int NaturalKeyId;
public string Field2;
public string Field3;
}
NaturalKeyId 字段将形成一个聚集索引。
有没有办法将其保留为(唯一)主键,但不将其作为聚集索引?在我被引诱之前,我同意在单调增加(代理)Id 字段上使用聚集索引通常会更好。但是在特定情况下,所有更新操作始终使用 NaturalKey(没有为更新传递方便的 Id。更新总是由只知道 Natural Key 的外部系统触发),我想要避免(如果可能)在更新/删除实体之前必须先通过自然键读取实体的开销。
我无法将自然键本身转换为聚集索引,因为键值本质上是随机的,我将面临插入页面拆分。
编辑:我已经有了一个可行的解决方案,在运行迁移后,我在数据库中手动重新创建了具有唯一索引 NaturalKeyId 而不是聚集索引的表。
【问题讨论】:
标签: entity-framework entity-framework-core