EF Core,强制外键对唯一的方法

问题描述 投票:0回答:1

我有一个由 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();

但我认为这只是单向的。

提前致谢

sql-server entity-framework-core relationship
1个回答
0
投票

您可以尝试以

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
在代码端执行比较:

SqlGuid
使用 SQL Server 行为实现
CompareTo
,值的最后六个字节最重要。
Guid
评估所有 16 个字节。

© www.soinside.com 2019 - 2024. All rights reserved.