Saya menemukan tiga cara untuk menyelesaikan masalah.
Indeks unik di EntityFramework Core:
Pendekatan pertama:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Entity>()
.HasIndex(p => new {p.FirstColumn , p.SecondColumn}).IsUnique();
}
Pendekatan kedua untuk membuat Batasan Unik dengan EF Core dengan menggunakan Tombol Alternatif.
Contohnya
Satu kolom:
modelBuilder.Entity<Blog>().HasAlternateKey(c => c.SecondColumn).HasName("IX_SingeColumn");
Beberapa kolom:
modelBuilder.Entity<Entity>().HasAlternateKey(c => new [] {c.FirstColumn, c.SecondColumn}).HasName("IX_MultipleColumns");
EF 6 dan di bawah ini:
Pendekatan pertama:
dbContext.Database.ExecuteSqlCommand(string.Format(
@"CREATE UNIQUE INDEX LX_{0} ON {0} ({1})",
"Entitys", "FirstColumn, SecondColumn"));
Pendekatan ini sangat cepat dan bermanfaat tetapi masalah utamanya adalah Kerangka Entity tidak tahu apa-apa tentang perubahan itu!
Pendekatan kedua:
Saya menemukannya di posting ini tetapi saya tidak mencoba sendiri.
CreateIndex("Entitys", new string[2] { "FirstColumn", "SecondColumn" },
true, "IX_Entitys");
Masalah dari pendekatan ini adalah sebagai berikut: Perlu DbMigration jadi apa yang Anda lakukan jika Anda tidak memilikinya?
Pendekatan ketiga:
Saya pikir ini yang terbaik tetapi membutuhkan waktu untuk melakukannya. Saya hanya akan menunjukkan kepada Anda ide di baliknya: Dalam tautan ini http://code.msdn.microsoft.com/CSASPNETUniqueConstraintInE-d357224a
Anda dapat menemukan kode untuk anotasi data kunci unik:
[UniqueKey] // Unique Key
public int FirstColumn { get; set;}
[UniqueKey] // Unique Key
public int SecondColumn { get; set;}
// The problem hier
1, 1 = OK
1 ,2 = NO OK 1 IS UNIQUE
Masalah untuk pendekatan ini; Bagaimana saya bisa menggabungkannya? Saya punya ide untuk memperpanjang implementasi Microsoft ini misalnya:
[UniqueKey, 1] // Unique Key
public int FirstColumn { get; set;}
[UniqueKey ,1] // Unique Key
public int SecondColumn { get; set;}
Kemudian di IDatabaseInitializer seperti yang dijelaskan dalam contoh Microsoft Anda dapat menggabungkan kunci sesuai dengan bilangan bulat yang diberikan. Satu hal yang harus diperhatikan: Jika properti unik adalah tipe string maka Anda harus mengatur MaxLength.