我可以对按任何顺序唯一的多个属性进行主键/唯一约束吗?

本文关键字:唯一 约束 任何 顺序 我可以 属性 | 更新日期: 2023-09-27 18:36:46

我有以下模型,它本质上是一个多对多关系表。

public class Friend
{
    [Key, ForeignKey("UserA")]
    public int UserAId { get; set; }
    public virtual User UserA { get; set; }
    [Key, ForeignKey("UserB")]
    public int UserBId { get; set; }
    public virtual User UserB { get; set; }
    public DateTime Since { get; set; }
    ...
}

在我的申请中,友谊总是双向的。如何限制后端同时插入new Friend { UserAId = 1, UserBId = 2 }new Friend { UserAId = 2, UserBId = 1 }

我可以对按任何顺序唯一的多个属性进行主键/唯一约束吗?

我认为您只有唯一的解决方案:在表上创建手动约束(您可以添加迁移,然后编写类似以下内容):

public override void Up()
{
    Sql(@"ALTER TABLE dbo.Friends ADD 
    CONSTRAINT CustomOrder CHECK (UserAId > UserBId)");
}
public override void Down()
{
    Sql(@"ALTER TABLE dbo.Friends DROP CONSTRAINT CustomOrder");
}

现在您只能添加用户的 id 对,例如:2 - 1、5 - 3,但不能添加 1 - 2 和 3 -5,因此我们没有您想要的重复,但您还必须提供分配给 UserA id 值的比 UserB id 值更多的值,但我认为这对您来说并不难。