2 回答

TA貢獻1806條經驗 獲得超5個贊
看起來像 EF6 錯誤(我猜是為了優化冗余索引)。數據庫提供程序無關緊要(SqlServer 提供程序也是如此)。
一種錯誤的行為是你所描述的。另一種情況是,如果您交換兩次HasIndex
調用的順序,生成的遷移包含正確的ix_index1
,但ix_index2
根本沒有。
由于這是一個錯誤,除了將問題報告給 EF6 問題跟蹤器并等待最終修復之外,別無他法。
但是,如果(Column1, Column2, Column2)
是遷移所指示的 PK ,則該 PKix_index2
是多余的,您可以安全地將其從 fluent 配置中刪除,這將允許正確生成ix_index1
.

TA貢獻1886條經驗 獲得超2個贊
好的,因為我最初嘗試的方法被確認由于錯誤而被破壞 - 我能夠找到另一個解決方案,它似乎工作正常,但更臟。
例如,假設您要創建 4 個索引,如下所示:
modelBuilder.Entity<MyEntity2>()
.HasIndex(p => new { p.Column1, p.Column2, p.Column3, p.Column5 })
.HasName("ix_1")
.IsUnique();
modelBuilder.Entity<MyEntity2>()
.HasIndex(p => new { p.Column1, p.Column2, p.Column4, p.Column5 })
.HasName("ix_2")
.IsUnique();
modelBuilder.Entity<MyEntity2>()
.HasIndex(p => new { p.Column1, p.Column2, p.Column3 })
.HasName("ix_3")
.IsUnique();
modelBuilder.Entity<MyEntity2>()
.HasIndex(p => new { p.Column1, p.Column2, p.Column4 })
.HasName("ix_4")
.IsUnique();
結果(截至撰寫本文時 31.07.2018)將被破壞。
要正確創建所有索引,您必須改用以下方法:
modelBuilder.Entity<MyEntity2>()
.Property(e => e.Column1)
.HasColumnAnnotation(
IndexAnnotation.AnnotationName,
new IndexAnnotation(new[]
{
new IndexAttribute("ix_3", 1) { IsUnique = true },
new IndexAttribute("ix_4", 1) { IsUnique = true },
new IndexAttribute("ix_2", 1) { IsUnique = true },
new IndexAttribute("ix_1", 1) { IsUnique = true }
}));
modelBuilder.Entity<MyEntity2>()
.Property(e => e.Column2)
.HasColumnAnnotation(
IndexAnnotation.AnnotationName,
new IndexAnnotation(new[]
{
new IndexAttribute("ix_3", 2) { IsUnique = true },
new IndexAttribute("ix_4", 2) { IsUnique = true },
new IndexAttribute("ix_2", 2) { IsUnique = true },
new IndexAttribute("ix_1", 2) { IsUnique = true }
}));
modelBuilder.Entity<MyEntity2>()
.Property(e => e.Column3)
.HasColumnAnnotation(
IndexAnnotation.AnnotationName,
new IndexAnnotation(new[]
{
new IndexAttribute("ix_3", 3) { IsUnique = true },
new IndexAttribute("ix_1", 3) { IsUnique = true }
}));
modelBuilder.Entity<MyEntity2>()
.Property(e => e.Column4)
.HasColumnAnnotation(
IndexAnnotation.AnnotationName,
new IndexAnnotation(new[]
{
new IndexAttribute("ix_4", 3) { IsUnique = true },
new IndexAttribute("ix_2", 3) { IsUnique = true },
}));
modelBuilder.Entity<MyEntity2>()
.Property(e => e.Column5)
.HasColumnAnnotation(
IndexAnnotation.AnnotationName,
new IndexAnnotation(new[]
{
new IndexAttribute("ix_2", 4) { IsUnique = true },
new IndexAttribute("ix_1", 4) { IsUnique = true },
}));
我希望我沒有搞砸任何數字。但是這個想法應該是可以理解的。
- 2 回答
- 0 關注
- 208 瀏覽
添加回答
舉報