Dalam Entity Framework 6.1+, Anda dapat menggunakan atribut ini pada model Anda:
[Index(IsUnique=true)]
Anda dapat menemukannya di namespace ini:
using System.ComponentModel.DataAnnotations.Schema;
Jika bidang model Anda adalah string, pastikan tidak disetel ke nvarchar (MAX) di SQL Server atau Anda akan melihat kesalahan ini dengan Kode Kerangka Kerja Entitas Pertama:
Kolom 'x' dalam tabel 'dbo.y' adalah jenis yang tidak valid untuk digunakan sebagai kolom kunci dalam indeks.
Alasannya karena ini:
SQL Server mempertahankan batas 900 byte untuk ukuran total maksimum dari semua kolom kunci indeks. "
(dari: http://msdn.microsoft.com/en-us/library/ms191241.aspx )
Anda dapat menyelesaikannya dengan menyetel panjang string maksimum pada model Anda:
[StringLength(450)]
Model Anda akan terlihat seperti ini sekarang di EF CF 6.1+:
public class User
{
public int UserId{get;set;}
[StringLength(450)]
[Index(IsUnique=true)]
public string UserName{get;set;}
}
Memperbarui:
jika Anda menggunakan Fasih:
public class UserMap : EntityTypeConfiguration<User>
{
public UserMap()
{
// ....
Property(x => x.Name).IsRequired().HasMaxLength(450).HasColumnAnnotation("Index", new IndexAnnotation(new[] { new IndexAttribute("Index") { IsUnique = true } }));
}
}
dan gunakan di modelBuilder Anda:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// ...
modelBuilder.Configurations.Add(new UserMap());
// ...
}
Perbarui 2
untuk EntityFrameworkCore, lihat juga topik ini: https://github.com/aspnet/EntityFrameworkCore/issues/1698
Perbarui 3
untuk EF6.2 lihat: https://github.com/aspnet/EntityFramework6/issues/274
Perbarui 4
ASP.NET Core Mvc 2.2 dengan EF Core:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Unique { get; set; }