Entity framework EF代码优先-将实体链接到同一从属实体-删除级联错误

Entity framework EF代码优先-将实体链接到同一从属实体-删除级联错误,entity-framework,ef-code-first,foreign-keys,Entity Framework,Ef Code First,Foreign Keys,我有两个实体: public class Profile { public int ProfileID { get; set; } public ICollection<Friend> Friends { get; set; } } public class Friend : BaseEntity { public int FriendID { get; set; } public int ProfileID { get; set; }

我有两个实体:

public class Profile
{
    public int ProfileID { get; set; }

    public ICollection<Friend> Friends { get; set; }
}

public class Friend : BaseEntity
{
    public int FriendID { get; set; }

    public int ProfileID { get; set; }
    [ForeignKey("ProfileID")]
    public Profile Profile { get; set; }

    public int FriendProfileID { get; set; }
    [ForeignKey("FriendProfileID")]
    public Profile FriendProfile { get; set; }
}
公共类配置文件
{
公共int ProfileID{get;set;}
公共ICollection好友{get;set;}
}
公共类友元:BaseEntity
{
public int-FriendID{get;set;}
公共int ProfileID{get;set;}
[ForeignKey(“ProfileID”)]
公共配置文件{get;set;}
公共int FriendProfileID{get;set;}
[ForeignKey(“FriendProfileID”)]
公共配置文件FriendProfile{get;set;}
}
我想我想做的很清楚。我希望一个配置文件能够有一个朋友的集合,引用其他配置文件。没有在OnModelCreating中指定任何内容,我得到以下错误:

引入外键约束 表“Friends”上的“FK_dbo.Friends_dbo.Profiles_FriendProfileID”可能 导致循环或多个级联路径。指定在删除时不执行任何操作或 更新时不执行任何操作,或修改其他外键约束

这意味着我需要在上下文的OnModelCreating方法中使用fluent API指定一个WillCascadeOnDelete(false)。然而,我似乎无法使用这些关系找出正确的语法


如何解决级联删除循环并使实体框架容忍这种关系?

您说得对,您需要向OnModelCreating()添加一个流畅的映射。试着这样做:

modelBuilder.Entity<Friend>()
                .HasOptional(x => x.FriendProfile )  //or HasRequired
                .WithMany()
                .WillCascadeOnDelete(false);
modelBuilder.Entity()
.has可选(x=>x.FriendProfile)//或has必需
.有很多
.WillCascadeOnDelete(假);

您是否正在尝试创建Profile.Friends导航属性Friend.Profile和Friend.FriendProfile的另一端?或者只是为了他们中的一个,还是一个也没有?试着让它成为Friend.Profile.的另一端似乎奏效了,只是我不得不做其中两个陈述。一个用于配置文件,一个用于FriendProfile。