1
A
回答
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));
相關問題
- 1. 實體框架代碼優先:共享主鍵
- 2. 實體框架建模代碼優先
- 3. 實體框架代碼優先使用
- 4. 實體框架代碼優先映射
- 5. 實體框架,代碼優先和datetimes
- 6. 與實體框架代碼優先
- 7. 在實體框架代碼優先4.1
- 8. 映射實體框架「代碼優先」
- 9. 實體框架代碼優先 - 界面
- 10. 實體框架 - 代碼優先Fluent API:ErrorMessage?
- 11. 實體框架代碼優先的NullReferenceException
- 12. 實體框架 - 代碼優先方法
- 13. 播種實體框架代碼優先
- 14. 實體框架+ PostgreSQL代碼優先
- 15. 實體框架代碼優先 - 關係
- 16. MySql和實體框架代碼優先
- 17. 實體框架代碼優先 - 非空類型的默認值
- 18. 實體框架4.1代碼優先KeyAttribute作爲非標識列
- 19. 實體框架:數據庫優先/代碼優先混合
- 20. 實體框架端口從模型優先到代碼優先
- 21. 代碼優先或模型優先(實體框架/ RIA服務)
- 22. 實體框架代碼優先外鍵問題
- 23. 實體框架代碼優先 - 外鍵關係
- 24. 創建與實體框架代碼優先約束或鍵ApplicationUser
- 25. 實體框架 - 代碼優先 - 更新不會更改外鍵
- 26. 實體框架代碼優先 - 設置外鍵/導航屬性
- 27. 實體框架代碼優先空外鍵
- 28. 實體框架中的唯一鍵約束代碼優先
- 29. 空實體框架中的外鍵代碼優先
- 30. 用實體框架代碼優先定義外鍵約束
版本6.2.0現在是最後的,不再是測試版。 這個答案完美。 我從6.1.3更新到6.2.0只是爲了做到這一點,並沒有任何問題。 +1 – Edu