【发布时间】:2021-01-24 01:22:12
【问题描述】:
我有一个用于自引用的多对多表,我希望有一个由两个外键组成的索引(或键)。 我还想避免相同的键重复和重新排序的键,例如
UserParentId xxx UserChildId
0 1 => 好的
0 2 => 好的
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});
【问题讨论】:
标签: entity-framework-core foreign-keys self-reference key-pair