C# EF CodeFirst将列添加到自联接关系

C# EF CodeFirst将列添加到自联接关系,c#,entity-framework,C#,Entity Framework,所以我使用asp身份 应用程序用户有FriendRequests,我就是这么做的 public class ApplicationUser : IdentityUser { public ApplicationUser() { FriendRequests = new Collection<ApplicationUser>(); } public virtual ICollection<ApplicationUser

所以我使用asp身份 应用程序用户有FriendRequests,我就是这么做的

public class ApplicationUser : IdentityUser
{
     public ApplicationUser()
     {
          FriendRequests = new Collection<ApplicationUser>();
     }

     public virtual ICollection<ApplicationUser> FriendRequests {get; set;}

}
公共类应用程序用户:IdentityUser
{
公共应用程序用户()
{
FriendRequests=新集合();
}
公共虚拟ICollection FriendRequests{get;set;}
}
这是我的Fluent Api映射

         modelBuilder.Entity<ApplicationUser>()
         .HasMany(x => x.FriendRequests)
         .WithMany()
         .Map(x => 
                {
                    x.MapLeftKey("UserRequestingID");
                    x.MapRightKey("UserBeingRequestedID");
                    x.ToTable("FriendRequests");
                });
modelBuilder.Entity()
.HasMany(x=>x.FriendRequests)
.有很多
.Map(x=>
{
x、 MapLeftKey(“用户请求ID”);
x、 MapRightKey(“UserBeingRequesteId”);
x、 ToTable(“FriendRequests”);
});
这将创建一个表“FriendRequests”,其中包含两列“UserRequestingID”和“UserBeingRequesteId”

我想在这个表中添加一个额外的列“isIgnored”,我该怎么做? 我能这样做吗?或者我应该创建一个新类


提前感谢。

仅当连接表不包含PK以外的列时,才支持通过映射建立多对多关系。所以,是的,如果您想包含额外的列,那么您需要创建显式实体并设置2
one-to-many
关系

大概是这样的:

型号:

公共类应用程序用户:IdentityUser
{
// ...
公共虚拟ICollection FriendRequests{get;set;}
请求的公共虚拟ICollection{get;set;}
}
公共类请求
{
公共字符串UserRequestingID{get;set;}
公共字符串UserBeingRequestedID{get;set;}
公共布尔值被忽略{get;set;}
公共虚拟应用程序用户用户请求{get;set;}
公共虚拟应用程序用户UserBeingRequested{get;set;}
}
配置:

modelBuilder.Entity()
.HasKey(e=>new{e.UserRequestingID,e.UserBeingRequestedID});
modelBuilder.Entity()
.HasRequired(e=>e.userrequising)
.WithMany(e=>e.FriendRequests)
.HasForeignKey(e=>e.UserRequestingID)
.WillCascadeOnDelete();
modelBuilder.Entity()
.HasRequired(e=>e.UserBeingRequested)
.WithMany(e=>e.FriendRequested)
.HasForeignKey(e=>e.UserBeingRequestedID)
.WillCascadeOnDelete();
public class ApplicationUser : IdentityUser
{
    // ...
    public virtual ICollection<FriendRequest> FriendRequests {get; set;}
    public virtual ICollection<FriendRequest> FriendRequested {get; set;}
}

public class FriendRequest
{
    public string UserRequestingID { get; set; }
    public string UserBeingRequestedID { get; set; }
    public bool IsIgnored { get; set; }
    public virtual ApplicationUser UserRequesting { get; set; }
    public virtual ApplicationUser UserBeingRequested { get; set; }
}
modelBuilder.Entity<FriendRequest>()
    .HasKey(e => new { e.UserRequestingID, e.UserBeingRequestedID });

modelBuilder.Entity<FriendRequest>()
    .HasRequired(e => e.UserRequesting)
    .WithMany(e => e.FriendRequests)
    .HasForeignKey(e => e.UserRequestingID)
    .WillCascadeOnDelete();

modelBuilder.Entity<FriendRequest>()
    .HasRequired(e => e.UserBeingRequested)
    .WithMany(e => e.FriendRequested)
    .HasForeignKey(e => e.UserBeingRequestedID)
    .WillCascadeOnDelete();