我有两张桌子有问题。


第一个表与用户有关,并具有-userId, username, password, etc
第二个是处理消息,因此它具有-messageId, senderId, receiverId, messageContent。


如您所见,senderIdreceiverId都需要与users表中的userId相关联。

但是,当我尝试使用Code First时,它崩溃了。
我有一个例外:


  “在表'Messages'上引入FOREIGN KEY约束'FK_dbo.Messages_dbo.Users_ReceiverId'可能会导致循环或多个级联路径。请指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。”


这就是我在Message类中建立关系的方式:

    [ForeignKey("Sender")]
    public int SenderId { get; set; }
    public virtual User Sender { get; set; }

    [ForeignKey("Receiver")]
    public int ReceiverId { get; set; }
    public virtual User Receiver { get; set; }


有任何想法吗?我现在被困住了。如果我先进行数据库操作,则效果很好,但如果我先尝试代码,则效果不佳。

最佳答案

在Migrations文件夹中生成的.cs文件中,将cascadeDelete: true替换为cascadeDelete: false,例如:

AddForeignKey("dbo.Messages", "ReceiverId", "dbo.Users", "Id",
    cascadeDelete: true);
AddForeignKey("dbo.Messages", "SenderId", "dbo.Users", "Id",
    cascadeDelete: true);


成为:

AddForeignKey("dbo.Messages", "ReceiverId", "dbo.Users", "Id",
    cascadeDelete: false);
AddForeignKey("dbo.Messages", "SenderId", "dbo.Users", "Id",
    cascadeDelete: false);

08-06 19:46