如何在配置文件中将唯一键约束放在EF中?

时间:2014-10-27 12:13:55

标签: c# entity-framework entity-framework-4

我在项目中使用EF配置文件。我有Employee的域类,它只有它的属性(无数据注释或任何关系)

我想为用户名编写唯一的密钥约束代码。

请看下面的员工班。

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. 
        }
    }
}

如何为username属性编写唯一键约束?

2 个答案:

答案 0 :(得分: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 }));

编辑:使用声明添加

答案 1 :(得分:0)

EF不支持Unique约束,但它支持唯一索引。没有直接的方法使用流畅的API映射它们,但您可以利用流畅的API方法添加属性,如下所示。

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

修改

正如Max Brodin在他的评论中所指出的那样,这仅在EF 6.1中得到支持。