我找到了解决问题的三种方法。
EntityFramework Core 中的唯一索引:
第一种方法:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Entity>()
.HasIndex(p => new {p.FirstColumn , p.SecondColumn}).IsUnique();
}
第二种通过使用备用键使用 EF Core 创建唯一约束的方法。
例子
一栏:
modelBuilder.Entity<Blog>().HasAlternateKey(c => c.SecondColumn).HasName("IX_SingeColumn");
多列:
modelBuilder.Entity<Entity>().HasAlternateKey(c => new [] {c.FirstColumn, c.SecondColumn}).HasName("IX_MultipleColumns");
EF 6 及以下:
第一种方法:
dbContext.Database.ExecuteSqlCommand(string.Format(
@"CREATE UNIQUE INDEX LX_{0} ON {0} ({1})",
"Entitys", "FirstColumn, SecondColumn"));
这种方法非常快速且有用,但主要问题是 Entity Framework 对这些更改一无所知!
第二种方法:
我在这篇文章中找到了它,但我自己没有尝试过。
CreateIndex("Entitys", new string[2] { "FirstColumn", "SecondColumn" },
true, "IX_Entitys");
这种方法的问题如下:它需要 DbMigration 那么如果你没有它怎么办?
第三种方法:
我认为这是最好的方法,但需要一些时间来完成。我将向您展示其背后的想法:在此链接http://code.msdn.microsoft.com/CSASPNETUniqueConstraintInE-d357224a
中,您可以找到唯一关键数据注释的代码:
[UniqueKey] // Unique Key
public int FirstColumn { get; set;}
[UniqueKey] // Unique Key
public int SecondColumn { get; set;}
// The problem hier
1, 1 = OK
1 ,2 = NO OK 1 IS UNIQUE
这种方法的问题;我怎样才能将它们结合起来?我有一个想法来扩展这个 Microsoft 实现,例如:
[UniqueKey, 1] // Unique Key
public int FirstColumn { get; set;}
[UniqueKey ,1] // Unique Key
public int SecondColumn { get; set;}
稍后在 Microsoft 示例中描述的 IDatabaseInitializer 中,您可以根据给定的整数组合键。但是必须注意一件事:如果唯一属性是字符串类型,那么您必须设置 MaxLength。