2014-10-27 2 views
0

Я использую EF в проекте с конфигурационным файлом. У меня есть класс домена Employee, который имеет только свои свойства (No Data Annotations или какое-либо отношение)Как установить уникальный ключ в EF, в файле конфигурации?

Я хочу написать уникальный код ограничения ключа для имени пользователя.

Пожалуйста, смотрите ниже, класс сотрудника.

public class Employee : IEntity 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Gender { get; set; } 
    public string Address { get; set; } 
    public string MobileNo { get; set; } 
    public string Email { get; set; } 
    public string UserName { get; set; } 
    public string Password { get; set; } 
} 

У меня есть класс конфигурации, который содержит все проверки класса сотрудников.

using System.Data.Entity.ModelConfiguration; 

class Configurations 
{ 
    public class EmployeeConfigration : EntityTypeConfiguration<Employee> 
    { 
     public EmployeeConfigration() 
     { 
      this.Property(x => x.FirstName).IsRequired().HasMaxLength(50); 
      this.Property(x => x.LastName).HasMaxLength(50); 
      // I want to write code for unique key constrain,for username property. 
     } 
    } 
} 

Как написать уникальное ограничение ключа для свойства имени пользователя?

ответ

0

EF не поддерживает уникальные ограничения, но поддерживает уникальные индексы. Нет прямого способа сопоставления их с белым API, но вы можете использовать свободный API-интерфейс для добавления атрибутов, как показано ниже.

Property(x => x.UserName) 
.HasColumnAnnotation("Index", new IndexAttribute() {IsUnique = true}); 

EDIT

Как Макс Brodin отметил в своем комментарии, это только поддерживается в EF 6.1.

+0

Он не показал IndexAttribute собственность, которая у меня есть библиотека добавить? – bnil

+1

Это будет работать только для EF, начиная с версии 6.1, с проверкой подлинности [MSDN] (http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.schema.indexattribute (v = vs.113) .aspx) –

+0

Да, я использую версию 6.1.0.0, все еще не показываю ... – bnil

1

Пожалуйста, попробуйте этот код

using System.ComponentModel.DataAnnotations.Schema; 
using System.Data.Entity.Infrastructure.Annotations; 
... 


this.Property(t => t.UserName) 
    .HasColumnAnnotation(
     IndexAnnotation.AnnotationName, 
     new IndexAnnotation(
      new IndexAttribute("IX_UserName", 1) { IsUnique = true })); 

EDIT: добавлены с помощью заявления

+0

Предоставление ошибки 'Имя 'IndexAnnotation' не существует в текущем контексте' – bnil

+0

Вам необходимо добавить _using System.Data.Entity.Infrastructure.Annotations; _ –

Смежные вопросы