我有一个由 EF 实体
UsersContacts
表示的多对多 UserContact
关系表。该关系是来自 Users
表的对称的多对多用户链接对。
我的目标:在每次插入/搜索时,拥有独特的用户对组合。无论列的顺序(IdUserA,IdUserB)或(IdUserB,IdUserA),都没关系。
即:
UsersContacts
:
身份证 | Id用户A | IdUserB | 状态 |
---|---|---|---|
1 | 1 | 1 | 好的 |
2 | 1 | 5 | 好的 |
3 | 3 | 2 | 好的 |
4 | 1 | 2 | 好的 |
5 | 5 | 1 | 重复 |
6 | 14 | 2 | 好的 |
7 | 2 | 1 | 重复 |
8 | 2 | 2 | 好的 |
到目前为止我设置的是:
modelBuilder.Entity<UserContact>()
.HasIndex(uc => new { uc.IdUserA, uc.IdUserB})
.IsUnique();
但我认为这只是单向的。
提前致谢
您可以尝试以
IdUserA
大于或等于(或小于或等于)IdUserB
的方式维护连接表。例如使用检查约束:
modelBuilder
.Entity<UserContact>()
.ToTable(uc => uc.HasCheckConstraint("CK_IdUserA_GE_IdUserB", "IdUserA >= IdUserB"))
.HasIndex(uc => new { uc.IdUserA, uc.IdUserB});
然后在代码中的插入中维护此属性。请注意,根据 比较 GUID 和 uniqueidentifier 值 文档,您应该使用
SqlGuid
在代码端执行比较:
使用 SQL Server 行为实现SqlGuid
,值的最后六个字节最重要。CompareTo
评估所有 16 个字节。Guid