我有以下模型,它本质上是一个多对多关系表。
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 值,但我认为这对您来说并不困难。
关于c# - 我可以对以任何顺序唯一的多个属性设置主键/唯一约束吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35685430/