0

私はこれらの2つのエンティティを持っています:

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; }
}

私が何をしようとしているのかは明らかだと思います。プロファイルに、他のプロファイルを参照するフレンドのコレクションを含めることができるようにしたい。OnModelCreatingで何も指定しないと、次のエラーが発生します。

テーブル「Friends」にFOREIGNKEY制約「FK_dbo.Friends_dbo.Profiles_FriendProfileID」を導入すると、サイクルまたは複数のカスケードパスが発生する可能性があります。ON DELETENOACTIONまたはONUPDATENO ACTIONを指定するか、他のFOREIGNKEY制約を変更します。

つまり、コンテキストのOnModelCreatingメソッドでFluent APIを使用してWillCascadeOnDelete(false)を指定する必要があります。ただし、これらの関係を使用して正しい構文を理解できないようです。

カスケード削除サイクルを解決し、エンティティフレームワークにこの関係を許容させるにはどうすればよいですか?

4

1 に答える 1

1

OnModelCreating()に流暢なマッピングを追加する必要があるのは正しいことです。次のようなものを試してください。

modelBuilder.Entity<Friend>()
                .HasOptional(x => x.FriendProfile )  //or HasRequired
                .WithMany()
                .WillCascadeOnDelete(false);
于 2013-01-16T19:55:32.167 に答える