gpt4 book ai didi

asp.net-mvc - 如何在其中配置与主键的多对多关系

转载 作者:行者123 更新时间:2023-12-04 18:01:31 25 4
gpt4 key购买 nike

这就是我要实现的目标:

  modelBuilder.Entity<ApplicationUser>()      
.HasMany(u => u.Following)
.WithMany(u => u.Followers)
.Map(m =>
{
m.ToTable("FollowTables");
m.MapLeftKey("UserId");
m.MapRightKey("FollowId");
});

在应用程序用户类中,我已经像这样配置了关注者和关注者:

public ICollection<ApplicationUser> Following { get; set; }
public ICollection<ApplicationUser> Followers { get; set; }

下表应该是这样的:

 public class FollowTable
{
[Key]
public int autoId { get; set; }
public int UserId { get; set; }
public int? FollowId { get; set; }
}

autoId是主键,UserId和FollowId都是ApplicationUser类的外键,其中UserId是用户自己的id,FollowId是用户关注的id。其数据可能如下:

  autoId  UserId  FollowId
1 4 11
2 4 12
3 4 13

现在,我的问题是当我通过 pmc 更新数据库时,它创建了两个数据库表,一个是带有列 (USerId, FollowId) 的 FollowTables,另一个是 FollowTables1(autoId, USerId, FollowId)。

如果我从 applicationDbContext 类中删除这一行:

public DbSet<FollowTable> FollowTables { get; set; }

然后它只创建一个没有主键的表。

请有人帮助我。如何正确配置 UserId 和 followId 作为外键,这两个应该映射到 ApplicationUser 的 Id。我也想用那些Collection的following和Followers。怎么做。

最佳答案

您必须决定是否要使用表示联结表的实体。如果您不需要向该表添加任何其他属性(FK 除外),那么我建议您不要将联结表映射为实体。由于 Entity Framework 将为您处理该表,因此对您来说会更容易。

现在,如果您真的需要映射该表,那么您需要删除多对多流畅的 api 配置并更改导航属性的类型:

public ICollection<FollowTable> Following { get; set; }
public ICollection<FollowTable> Followers { get; set; }

这将创建两个与联结表的一对多关系,这是多对多关系的显式表示。为此,您还需要对该实体进行一些更改:

public class FollowTable
{
[Key]
public int autoId { get; set; }

public int UserId { get; set; }
[ForeignKey("User")]
public ApplicationUser User{ get; set; }

[ForeignKey("Follow")]
public int? FollowId { get; set; }
public ApplicationUser Follow{ get; set; }
}

此外,我认为 FollowId Fk 属性不应该是可为 null 的 FK,因为您想表示两个人之间的关系。

如果你问我关于你应该采取什么选项的意见,我建议你不要映射联结表,如果你打算只拥有那些属性。

关于asp.net-mvc - 如何在其中配置与主键的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34634090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com