表Fluent Api / Code First中的唯一字段

时间:2013-05-19 11:21:34

标签: ef-code-first entity-framework-5 unique-index

我一直在寻找一种方法,例如使用Fluent API / Code First在数据库中唯一的用户名。这甚至可以通过这些路线之一吗?

因为我找不到任何教程或示例来说明这是如何完成的。

1 个答案:

答案 0 :(得分:3)

您必须提供Context Initializer并覆盖Seed方法以初始化您的数据库。在那里,您可以使用 DbContext.Database.ExecuteSqlCommand 添加唯一索引。以下是相同的示例代码。

<强>模型

public class Relay  {

    //Scalar Properties
    private int _id;
    [Key]
    public virtual int Id {
        get { return _id; }
        set { SetField(ref _id, value, () => Id); }
    }

    private string _name;
    [MaxLength(100)]
    [Required]
    public virtual string Name {
        get { return _name; }
        set { SetField(ref _name, value, () => Name); }
    }

    //Other properties of Model
}

<强>的DbContext

public class RelayContext : DbContext {
     public DbSet<Relay> Relays { get; set; }

    public RelayContext(string connectionString) : 
        base(connectionString) {
        Database.SetInitializer(new RelayContextInitializer());
    }
}

<强> ContextInitializer

public class RelayContextInitializer : CreateDatabaseIfNotExists<RelayContext> {
    protected override void Seed(RelayContext context) {
        context.Database.ExecuteSqlCommand("CREATE UNIQUE INDEX Uix_Relay_Name ON Relays(Name)");
    }
}

那就是它。您现在在Relays Table的Name字段中创建了唯一索引。