我有一个表
class Sample {
public string From;
public string To;
}
我想确保From和Two在整个中是唯一的
意味着如果From=2,并且To=1。表中不能有1,2或2,1的组合
感谢
在数据库中添加一个检查约束;至
除了防止(1,2(,(2,1(这个设计还为您提供了一个简单的方法来找到一对,因为您知道它将被存储为(1,2。
这并不简单,但您可以做的是,创建第三列,它是这两列的串联,并将第三列用作唯一键。
您应该如何生成第三列,以便(From,to(=(1,2(和(2,1(都相同?假设第三个列名是Both,您可以使用下面给出的基本算法。
class Sample {
public string From;
public string To;
public string Both;
}
算法:
if(From.ComareTo(To) >= 0) {
Both = To + From;
} else {
Both = From + To;
}
您将需要使用模型定义,在您的上下文中,您需要添加
modelBuilder
.Entity<Sample>()
.HasIndex(u => new { u.From, u.To })
.IsUnique();
然后,将添加索引。
检查实体框架核心首先添加唯一约束代码
非常相似,但只针对一个归档。
编辑
如果你需要唯一的配对,那么将其与另一个答案组合,在你的表中添加一个字段,并按顺序组合
class Sample {
public string From;
public string To;
public string Both;
}
然后设置两个顺序的值:
var list = new List<string>
{
sample.From, sample.To
}
.OrderBy(x => x)
.ToList();
sample.Both = string.Join(":", list);
}
通过这种方式,唯一的约束是反对两者的组合,因此,它们在from
和to
中放什么并不重要