Apakah ada cara untuk membuat indeks pada properti / kolom menggunakan code-first, daripada menggunakan yang baru IndexAttribute
?
112
Apakah ada cara untuk membuat indeks pada properti / kolom menggunakan code-first, daripada menggunakan yang baru IndexAttribute
?
Jawaban:
Nah 26.10.2017 Entity Framework 6.2 secara resmi dirilis . Ini mencakup kemungkinan untuk menentukan indeks dengan mudah melalui Fluent API. Ho itu digunakan sudah diumumkan dalam versi beta 6.2.
Sekarang Anda dapat menggunakan
HasIndex()
metode ini, diikuti olehIsUnique()
jika itu adalah indeks unik.Contoh perbandingan kecil (sebelum / sesudah):
Juga dimungkinkan untuk menandai indeks sebagai clustered with
.IsClustered()
.EDIT # 1
Menambahkan contoh untuk indeks multi kolom dan informasi tambahan tentang cara menandai indeks sebagai berkerumun.
EDIT # 2
Sebagai informasi tambahan, di EF Core 2.1 persis sama seperti di EF 6.2 sekarang.
Berikut adalah artcile MS Doc sebagai referensi.
sumber
new
. Saya akan memperbaikinya.Saat ini tidak ada "dukungan kelas satu" untuk membuat indeks melalui API yang lancar, tetapi yang dapat Anda lakukan adalah melalui API yang lancar Anda dapat menandai properti sebagai memiliki atribut dari API Anotasi. Ini akan memungkinkan Anda untuk menambahkan
Index
atribut melalui antarmuka yang lancar.Berikut adalah beberapa contoh dari item pekerjaan dari situs Issues untuk EF.
Buat indeks pada satu kolom:
Beberapa indeks dalam satu kolom:
Indeks Multi-Kolom:
Menggunakan teknik di atas akan menyebabkan
.CreateIndex()
panggilan dibuat secara otomatis untuk Anda dalamUp()
fungsi saat Anda menyusun migrasi berikutnya (atau secara otomatis dibuat dalam database jika Anda tidak menggunakan migrasi).sumber
.Primarykey(x=>x.id,clustered:false)
methodHasAnnotation
metode tersebut dan tidak ada metode seperti ini. tetapi saya menemukan metode yang namanyaHasColumnAnnotation
menerima parameter yang Anda berikan. Apakah Anda perlu memperbarui jawaban Anda atau saya salah?Saya telah membuat beberapa metode ekstensi dan membungkusnya dalam paket nuget untuk membuatnya lebih mudah.
Instal
EntityFramework.IndexingExtensions
paket nuget.Kemudian Anda dapat melakukan hal berikut:
Proyek dan kode sumber ada di sini . Nikmati!
sumber
IndexAttribute
kelas EF , jadi saya tidak dapat memasukkannya ke dalam perpustakaan saya.Tanpa nama eksplisit:
Dengan nama tertentu:
sumber
EntityFramework
. itu termasuk dalam majelis itu. hanya bingung dengan NS.instead of using the new IndexAttribute
apakah Anda memperhatikannya?Dari EF 6.1 dan seterusnya, atribut
[Index]
ini didukung.Gunakan
[Index(IsUnique = true)]
untuk indeks unik.Ini tautan dari Microsoft
sumber
[Index("IX_BlogIdAndRating", 2)]
public int Rating { get; set; }
[Index("IX_BlogIdAndRating", 1)]
public int BlogId { get; set; }
Berikut referensi dari MicrosoftKerangka Entitas 6
Dan tambahkan menggunakan:
sumber
Anda dapat menggunakan anotasi data INDEX Kode Anotasi Data Pertama
sumber
Jika Anda tidak ingin menggunakan atribut pada POCO Anda, Anda selalu dapat melakukannya seperti berikut:
Anda dapat menjalankan pernyataan ini di
DbInitializer
kelas turunan khusus Anda . Saya tidak tahu cara API Lancar untuk melakukan ini.sumber
Saya menulis metode ekstensi untuk digunakan dalam EF yang lancar untuk menghindari kode tambahan:
lalu gunakan seperti ini:
atau seperti ini jika indeks membutuhkan beberapa konfigurasi:
sumber
Anda bisa menggunakan salah satunya
// Indeks
atau
sumber