2016-06-16 12 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をオーバーライドしてEntity Framework Core Code Firstのソリューションを実装します。

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

このコードは次のような移行を生成します:

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

EF 6.2がこの問題を解決しました。現在、ベータ状態ですが、動作します。

まず、6.2にあなたのEFをアップグレード:

Install-Package EntityFramework -Version 6.2.0-beta1 -Pre 

その後は、OnModelCreating方法では、主キーにfalseにIsClusteredを設定します。

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

バージョン6.2.0を今、最終的です、もうベータ版ではありません。 この回答は完璧に機能しました。 これを行うために6.1.3から6.2.0に更新しましたが、問題はありませんでした。 +1 – Edu

関連する問題