對于物體框架,當我們在物體上有一個主鍵時,EF 總是會生成一個聚集索引。
public class TestEntity
{
[key]
public int NaturalKeyId;
public string Field2;
public string Field3;
}
該NaturalKeyId欄位將形成一個聚集索引。
有沒有辦法將其保留為(唯一)主鍵,但不將其作為聚集索引?在我被引誘之前,我同意在單調增加(代理)Id欄位上使用聚集索引通常會更好。但是在特定情況下,所有更新操作始終使用 NaturalKey (沒有為更新傳遞方便的 Id。更新總是由只知道 Natural Key 的外部系統觸發),我想避免(如果可能)在更新/洗掉物體之前必須先通過自然鍵讀取物體的開銷。
我無法將自然鍵本身轉換為聚集索引,因為鍵值本質上是隨機的,我將面臨插入的頁面拆分。
編輯:我已經有一個可行的解決方案,在運行遷移后,我在資料庫中手動重新創建了具有唯一索引NaturalKeyId而不是聚集索引的表。
uj5u.com熱心網友回復:
對于 Microsoft SQL Server,您可以使用 fluent API 將主鍵配置為非集群:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<TestEntity>().HasKey(e => e.NaturalKeyId).IsClustered(false);
}
Microsoft SQL Server 資料庫提供程式 - 索引 - EF Core | 微軟檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/411788.html
標籤:
下一篇:無法創建物體框架代碼優先遷移
