Entity Framework 6.1+ sürümünde bu özniteliği modelinizde kullanabilirsiniz:
[Index(IsUnique=true)]
Bunu şu ad alanında bulabilirsiniz:
using System.ComponentModel.DataAnnotations.Schema;
Model alanınız bir dizeyse, SQL Server'da nvarchar (MAX) olarak ayarlanmadığından emin olun, aksi takdirde Entity Framework Code First ile bu hatayı görürsünüz:
'Dbo.y' tablosundaki 'x' sütunu, bir dizinde anahtar sütun olarak kullanım için geçersiz olan bir türden.
Nedeni şudur:
SQL Server, tüm dizin anahtarı sütunlarının maksimum toplam boyutu için 900 baytlık sınırı korur. "
(from: http://msdn.microsoft.com/en-us/library/ms191241.aspx )
Bunu, modelinize bir maksimum dizi uzunluğu ayarlayarak çözebilirsiniz:
[StringLength(450)]
Modeliniz şimdi EF CF 6.1+ sürümünde şöyle görünecek:
public class User
{
public int UserId{get;set;}
[StringLength(450)]
[Index(IsUnique=true)]
public string UserName{get;set;}
}
Güncelleme:
Fluent kullanıyorsanız:
public class UserMap : EntityTypeConfiguration<User>
{
public UserMap()
{
// ....
Property(x => x.Name).IsRequired().HasMaxLength(450).HasColumnAnnotation("Index", new IndexAnnotation(new[] { new IndexAttribute("Index") { IsUnique = true } }));
}
}
ve modelBuilder'ınızda kullanın:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// ...
modelBuilder.Configurations.Add(new UserMap());
// ...
}
Güncelleme 2
EntityFrameworkCore için ayrıca şu konuya bakın: https://github.com/aspnet/EntityFrameworkCore/issues/1698
Güncelleme 3
EF6.2 için bkz: https://github.com/aspnet/EntityFramework6/issues/274
Güncelleme 4
EF Core ile ASP.NET Core Mvc 2.2:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Unique { get; set; }