一尘不染

唯一键和EF代码优先

c#

我的项目中有以下模型

public class Category
{   
    public Guid ID { get; set; }
    [Required(ErrorMessage = "Title cannot be empty")]
    public string Title { get; set; }
}

我试图Title作为唯一键,我用谷歌搜索了解决方案,但找不到任何解决方案。有什么可以建议我怎么做的吗?


阅读 422

收藏
2020-05-19

共1个答案

一尘不染

不幸的是,您不能首先将其定义为代码中的唯一键,因为EF根本不支持唯一键(希望在下一个主要版本中计划使用)。您可以做的是创建自定义数据库初始化器,并通过调用SQL命令手动添加唯一索引:

public class MyInitializer : CreateDatabaseIfNotExists<MyContext>
{
  protected override void Seed(MyContext context)
  {
    context.Database.ExecuteSqlCommand("CREATE UNIQUE INDEX IX_Category_Title ON Categories (Title)");
  }
}

并且必须在应用程序的引导程序中设置此初始化程序。

Database.SetInitializer<MyContext>(new MyInitializer());

编辑

现在(从EF 6.1开始),您可以轻松拥有独特的约束条件,

[Index("TitleIndex", IsUnique = true)]
 public string Title { get; set; }
2020-05-19