C# EF CodeFirst将列添加到自联接关系
所以我使用asp身份 应用程序用户有FriendRequests,我就是这么做的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
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以外的列时,才支持通过映射建立多对多关系。所以,是的,如果您想包含额外的列,那么您需要创建显式实体并设置2one-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();