对于 Entity Framework 来说,当实体拥有主键时,EF 总是会生成一个聚集索引。
有没有一种方法可以将其保留为(唯一的)主键,但不将其作为聚集索引?在我被嘲讽之前,我同意,通常最好在单调递增(替代)
我无法将自然主键本身转换为聚集索引,因为关键值基本上是随机的,并且我会面临插入时页面分割的问题。 编辑:我已经有一个工作解决方案,在迁移后,我手动在数据库中重新创建了表,使用
public class TestEntity
{
[key]
public int NaturalKeyId;
public string Field2;
public string Field3;
}
NaturalKeyId
字段将会形成一个聚集索引。有没有一种方法可以将其保留为(唯一的)主键,但不将其作为聚集索引?在我被嘲讽之前,我同意,通常最好在单调递增(替代)
Id
字段上有一个聚集索引。然而,在特定情况下,所有更新操作总是使用自然键(没有方便的Id传递给更新。 更新总是由只知道自然键的外部系统触发),我想避免(如果可能的话)必须先通过自然键读取实体才能更新/删除它所带来的开销。我无法将自然主键本身转换为聚集索引,因为关键值基本上是随机的,并且我会面临插入时页面分割的问题。 编辑:我已经有一个工作解决方案,在迁移后,我手动在数据库中重新创建了表,使用
NaturalKeyId
的唯一索引代替了聚集索引。