我可以在多个属性中拥有主键/唯一约束,这些属性在任何顺序中都是唯一的吗?

时间:2016-02-28 16:56:54

标签: c# asp.net-mvc entity-framework ef-code-first entity-framework-6

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

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 }

1 个答案:

答案 0 :(得分: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值,但我认为这对你来说并不困难。