自引用表,具有Ef Core Fluent API的唯一和独特密钥对

问题描述

我有一个用于自引用的多对多表,我想为其提供一个由两个外键组成的索引(或键)。 我也想避免相同的按键重复和像

UserParentId xxx UserChildId

0

0

1 1 =>没事

2的0 =>不正确,因为此链接已经存在(请参阅第二行)

最重要的是,我想在此索引中使用无序提供的两个键进行搜索。 像

_dbContext.UserToUsers.Find(userId1,userId2)

不知道userId1代表 UserParentId 还是 UserChildId

我已经阅读了此解决方案,这可能是一种很好的通用方法

模型应始终使 UserparentId 严格低于 UserChildId 和控制器都应该意识到这一点。

尽管如此,我仍然想知道是否已经在EF CORE中实现了这样的功能。 Index()或HasAlternateKey()似乎没有提供我想要的东西。有想法吗?

我的代码:

型号:

public class User
{
    public int Id { get; set; }

    public virtual ICollection<UserToUser> ChildrenUsers { get; set; }
    public virtual ICollection<UserToUser> ParentUsers { get; set; }
}
public class UserToUser
{
    public int Id { get; set; }
    public int UserParentId { get; set; }
    public int UserChildId { get; set; }

    public virtual User ChildUser { get; set; }
    public virtual User ParentUser { get; set; }
}

然后输入我的Fluent API代码:

 modelBuilder.Entity<UserToUser>().HasOne(d => d.ChildUser)
            .WithMany(p => p.ParentUsers)
            .HasForeignKey(d => d.UserParentId); 

        modelBuilder.Entity<UserToUser>().HasOne(d => d.ParentUser)
            .WithMany(p => p.ChildrenUsers)
            .HasForeignKey(d => d.UserChildId);

        modelBuilder.Entity<UserToUser>()
            .HasAlternateKey(x => new {x.UserChildId,x.UserParentId});

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)