我在我的中使用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);