2016-06-16 69 views

回答

2

EntityTypeConfiguration不提供設置主鍵作爲一個非聚集索引的一種手段,但你可以通過改變用於創建表的初始遷移完成這一點。有一個例子here

下面是如何使用屬性來指定集羣多列索引的例子:

[Index("IX_ColumnOneTwo", 1, IsClustered = true)] 
public int ColumnOne { get; set;} 

[Index("IX_ColumnOneTwo", 2, IsClustered = true)] 
public int ColumnTwo { get; set; } 

以及如何完成這個使用模型構造器的例子:

modelBuilder.Entity<ClassOne>() 
      .Property(t => t.ColumnOne) 
      .HasColumnAnnotation( 
        "Index", 
        new IndexAnnotation(new IndexAttribute("IX_ColumnOneTwo") { IsClustered = true })); 
modelBuilder.Entity<ClassOne>() 
      .Property(t => t.ColumnTwo) 
      .HasColumnAnnotation( 
        "Index", 
        new IndexAnnotation(new IndexAttribute("IX_ColumnOneTwo") { IsClustered = true })); 
2

有一個解決方案實體框架核心代碼首先通過覆蓋DbContext中的OnModelCreating

p.HasKey(b => b.ColumnId).ForSqlServerIsClustered(false); 

此代碼將生成如下遷移:

table.PrimaryKey("PK_Columns", x => x.ColumnId) 
         .Annotation("SqlServer:Clustered", false); 
5

EF 6.2已解決此問題。目前,它處於測試狀態,但它的工作原理。

首先,升級EF到6.2:

Install-Package EntityFramework -Version 6.2.0-beta1 -Pre 

然後,在OnModelCreating方法,設置IsClustered到false主鍵:

modelBuilder.Entity<Receipt>().HasKey(r => r.RecId, config => config.IsClustered(false)); 
+0

版本6.2.0現在是最後的,不再是測試版。 這個答案完美。 我從6.1.3更新到6.2.0只是爲了做到這一點,並沒有任何問題。 +1 – Edu