В Entity Framework 6.1+ ви можете використовувати цей атрибут на своїй моделі:
[Index(IsUnique=true)]
Ви можете знайти його в цьому просторі імен:
using System.ComponentModel.DataAnnotations.Schema;
Якщо ваше поле моделі є рядком, переконайтеся, що воно не встановлено на nvarchar (MAX) на SQL Server, або ви побачите цю помилку з Entity Framework Code спочатку:
Стовпець 'x' у таблиці 'dbo.y' має тип, який недійсний для використання в якості ключового стовпця в індексі.
Причина через це:
SQL Server зберігає обмеження в 900 байт для максимального загального розміру всіх стовпців ключових індексів. "
(від: http://msdn.microsoft.com/en-us/library/ms191241.aspx )
Ви можете вирішити це, встановивши максимальну довжину рядка для вашої моделі:
[StringLength(450)]
Ваша модель буде виглядати приблизно так у EF CF 6.1+:
public class User
{
public int UserId{get;set;}
[StringLength(450)]
[Index(IsUnique=true)]
public string UserName{get;set;}
}
Оновлення:
якщо ви використовуєте Fluent:
public class UserMap : EntityTypeConfiguration<User>
{
public UserMap()
{
// ....
Property(x => x.Name).IsRequired().HasMaxLength(450).HasColumnAnnotation("Index", new IndexAnnotation(new[] { new IndexAttribute("Index") { IsUnique = true } }));
}
}
і використовуйте у своїй моделіBuilder:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// ...
modelBuilder.Configurations.Add(new UserMap());
// ...
}
Оновлення 2
для EntityFrameworkCore див. також цю тему: https://github.com/aspnet/EntityFrameworkCore/isissue/1698
Оновлення 3
для EF6.2 див .: https://github.com/aspnet/EntityFramework6/isissue/274
Оновлення 4
ASP.NET Core Mvc 2.2 з EF Core:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Unique { get; set; }