C# 对属性禁用级联删除以避免不同的级联路径

C# 对属性禁用级联删除以避免不同的级联路径,c#,entity-framework,ef-code-first,fluent,C#,Entity Framework,Ef Code First,Fluent,我正在开发一个库,首先使用EntityFramework6.1.0代码、.NETFramework4.5、C#和SQLServer 我有两门课: public class User { public int UserId { get; set; } public string UserName { get; set; } public ICollection<Group> Groups { get; set; } public ICollectio

我正在开发一个库,首先使用EntityFramework6.1.0代码、.NETFramework4.5、C#和SQLServer

我有两门课:

public class User
{
    public int UserId { get; set; }
    public string UserName { get; set; }

    public ICollection<Group> Groups { get; set; }

    public ICollection<Message> MessagesSent { get; set; }
    public ICollection<Message> MessagesReceived { get; set; }
}

public class Message
{
    public int MessageId { get; set; }
    public string Body { get; set; }
    public DateTime DateSent { get; set; }

    public int UserId { get; set; }
    public User Sender { get; set; }

    public ICollection<User> Recipients { get; set; }
}
不会从我的数据库中删除用户,但我不知道如何解决此问题

我认为问题在于一封邮件有一个发件人(一个
用户
),也有一个或多个收件人(
用户
)。这将创建不同的级联路径(SQL Server不允许这样做)


如何禁用这些级联路径?可能是在
消息中。发件人

我已经解决了我的问题

在我打开
MessageConfiguration
之前:

HasRequired(m => m.Sender).
    WithMany(u => u.MessagesSent).
    HasForeignKey(m => m.UserId);
现在我有:

HasRequired(m => m.Sender).
    WithMany(u => u.MessagesSent).
    HasForeignKey(m => m.UserId).
    WillCascadeOnDelete(false);

问题是SQL Server不允许多个级联路径。如果您删除一个用户,则在
消息
上可以有两个删除级联:一个在
消息.发送者
上,另一个在
消息.接收者

是否可以包括组类及其配置?我根据此代码添加了一个组,但无法再现此错误。@MárkGergelyDolinka对不起,组和消息之间没有任何问题。我已经更新了我的问题,删除了对组的任何引用,我遇到了相同的错误。谢谢,我询问了有关组的问题,因为消息和用户实体都与它们有关系。现在我尝试了这段新代码,在使用迁移创建数据库时没有出现错误,您使用迁移还是初始值设定项?其他事项:当删除一个同时接收和发送消息的用户时,我得到错误:{“DELETE语句与引用约束冲突\“FK_dbo.messages\u dbo.Users\u user\u UserId\”。冲突发生在数据库“EF61OnDeleteNoAction\”表“dbo.messages\”列“user\u UserId”中。\r\n该语句已终止。}否,我正在创建数据库,没有使用迁移。今天下午,我将向您提供更多详细信息。@MárkGergelyDolinka您正在使用哪个数据库?我使用的是SQL Server,它不允许多个级联路径。
HasRequired(m => m.Sender).
    WithMany(u => u.MessagesSent).
    HasForeignKey(m => m.UserId);
HasRequired(m => m.Sender).
    WithMany(u => u.MessagesSent).
    HasForeignKey(m => m.UserId).
    WillCascadeOnDelete(false);