如何在EF Core中以两种方式制作独特的密钥



我有一个表

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);
}

通过这种方式,唯一的约束是反对两者的组合,因此,它们在fromto中放什么并不重要

相关内容

  • 没有找到相关文章

最新更新