如何使用Entity Framework Code First在虚拟列上添加索引?

时间:2016-05-28 01:47:12

标签: entity-framework azure entity-framework-6 azure-mobile-services

我有两个类,User和Follow,我为同一个类创建了两个关系,但我需要约束这对外键的唯一性。

我已经尝试添加索引,但它不起作用,索引没有添加到迁移代码中,我认为这是因为User和FollowUser是虚拟的。

如何在一对虚拟外键上添加唯一性?

提前致谢。

注意:我正在使用Azure移动应用服务,并自动添加主键字段。

public class Following : EntityData
{

    [Index("IX_FriendshipUniqueness", 1, IsUnique = true)]
    public virtual User User { get; set; }

    [Index("IX_FriendshipUniqueness", 2, IsUnique = true)]
    public virtual User FollowingUser { get; set; }

    [StringLength(10)]
    public string Status { get; set; }

}

public class User : EntityData
{
    public User()
    {
        this.Followings = new HashSet<Following>();
        this.Followers = new HashSet<Following>();
    }


    [InverseProperty("User")]
    public virtual ICollection<Following> Followings { get; set; }

    [InverseProperty("FollowingUser")]
    public virtual ICollection<Following> Followers { get; set; }

}

1 个答案:

答案 0 :(得分:1)

请阅读我几天前写的关系建议栏 - 它有助于了解如何限制Azure移动应用程序请求:https://shellmonger.com/2016/05/27/30-days-of-zumo-v2-azure-mobile-apps-day-26-relationship-advice/

简短版本 - 尽管EF6允许这样的约束(我并不是说它确实如此 - 我不是那样进入EF做出明确的声明),Azure移动应用程序不提供执行这些约束的能力。它需要在您的客户端代码中强制执行。