首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在其中配置多到多的主键关系

问如何在其中配置多到多的主键关系
EN

Stack Overflow用户
提问于 2016-01-06 13:14:41
回答 1查看 1.2K关注 0票数 3

这就是我想要达到的目标:

代码语言:javascript
复制
  modelBuilder.Entity<ApplicationUser>()      
                    .HasMany(u => u.Following)
                    .WithMany(u => u.Followers)
                    .Map(m =>
                            {
                                m.ToTable("FollowTables");
                                m.MapLeftKey("UserId");
                                m.MapRightKey("FollowId");
                            });

在应用程序用户类中,我配置了如下所示的追随者:

代码语言:javascript
复制
public ICollection<ApplicationUser> Following { get; set; }
public ICollection<ApplicationUser> Followers { get; set; }

下面的表格应该是这样的:

代码语言:javascript
复制
 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是用户为following.Its数据的id:

代码语言:javascript
复制
  autoId  UserId  FollowId
   1        4        11
   2        4        12
   3        4        13

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

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

代码语言:javascript
复制
public DbSet<FollowTable> FollowTables { get; set; }

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

谁来帮帮我。如何正确地将UserId和followId配置为外键,这两个应该映射到ApplicationUser的Id。我想使用那些集合的追随者和追随者too.how来做它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-06 13:37:22

您必须决定是否要使用表示连接表的实体。如果不需要向该表添加任何其他属性(不包括FKs ),那么我建议您不要将连接表映射为实体。由于实体框架将为您处理该表,这将使您更加容易。

现在,如果您确实需要映射该表,那么您需要删除多到多个fluent api配置,并更改导航属性的类型:

代码语言:javascript
复制
public ICollection<FollowTable> Following { get; set; }
public ICollection<FollowTable> Followers { get; set; }  

这将与连接表创建两个一对多的关系,一个多到多关系的显式表示。要做到这一点,还需要在该实体中进行一些更改:

代码语言:javascript
复制
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属性应该是可空的FK,因为您希望表示两个人之间的关系。

如果你问我关于你应该采取什么选择的意见,我建议你不要映射连接表,如果你只有这些属性的话。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34634090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档