c# - 我可以对以任何顺序唯一的多个属性设置主键/唯一约束吗?

标签 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 }

最佳答案

我认为你只有一个解决方案:在你的表上手动创建约束(你可以添加迁移然后写这样的东西):

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/

相关文章:

c# - 混淆为什么接口(interface)在基接口(interface)已经继承的情况下又被继承了

c# - 没有成员访问时怎么会出现NullReferenceException呢?

asp.net-mvc - 使用Google.Apis.YouTube.v3在YouTube channel 上载视频而无最终用户登录提示

asp.net-mvc - .net mvc 日期文化问题

asp.net - MVC 4 中的级联下拉列表

c# - 如何创建与资源管理器具有相同选项的上下文菜单

c# - SQL注入(inject)参数化查询

asp.net-mvc - 将 Ninject 与 Membership.Provider 一起使用

entity-framework - 未找到具有固定名称 'System.Data.SqlClient' 的 ADO.NET 提供程序的 Entity Framework 提供程序

c# - LINQ to Entities 无法识别方法 'System.TimeSpan Subtract(System.DateTime)