使用Fluent API设置具有2个关系的删除行为



我在我的中使用Fluent API。NET核心应用与EF。我有两个用户之间的Chat模型:

public class Chat
{     
//(id, text...)
public string InitiatorId { get; set; }
public ApplicationUser Initiator { get; set; }

public string InvitedId { get; set; }
public ApplicationUser Invited { get; set; }            
}
public class ApplicationUser 
{     
//(id...)
public List<Chat> Chats{ get; set; }

}

问题是,如果其中一个用户删除了,而我不能在我的dbContext:中以这种方式声明,我想删除聊天

builder.Entity<Chat>()
.HasOne(x => x.Initiator)
.WithMany(x => x.Chats)
.OnDelete(DeleteBehavior.Cascade);
builder.Entity<Chat>()
.HasOne(x => x.Invited)
.WithMany(x => x.Chats)
.OnDelete(DeleteBehavior.Cascade);

我得到以下错误:

无法在"ApplicationUser"之间创建关系。聊天和聊天。"已邀请",因为"ApplicationUser"之间已存在关系。聊天和聊天。启动器"。导航属性只能参与单个关系nship。如果您想覆盖现有关系,请在导航"聊天"中调用"忽略"。已在"OnModelCreating"中邀请"first"。

使用流利的API有合适的方法做我想做的事情吗?

您必须修复关系

public class ApplicationUser 
{     
//(id...)
public virtual List<Chat> InitiatorChats{ get; set; }
public virtual List<Chat> InvitedChats{ get; set; }

}
builder.Entity<Chat>()
.HasOne(x => x.Initiator)
.WithMany(x => x.InitiatorChats)
.HasForeignKey(d => d.InitiatorId);

builder.Entity<Chat>()
.HasOne(x => x.Invited)
.WithMany(x => x.InvitedChats)
.HasForeignKey(d => d.InvitedId)
.OnDelete(DeleteBehavior.Cascade);

最新更新