问题描述
我有一个用于自引用的多对多表,我想为其提供一个由两个外键组成的索引(或键)。 我也想避免相同的按键重复和像
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 (将#修改为@)