1

3つのモデルクラスがあります。

  1. ユーザー。
  2. エントリ。
  3. EntryLikes。

次のように:

public class User
{
    [Required]
    public int ID { get; set; }

    [Required]
    [DataType(DataType.Text)]
    public string Name { get; set; }
}
public class Entry
{
    [Required]
    public int ID { get; set; }

    public int UserID { get; set; }
    [ForeignKey("UserID")]
    public virtual User User { get; set; }
}
public class EntryLike
{
    [Required]
    public int ID { get; set; }

    [Required]
    public int UserID { get; set; }
    [ForeignKey("UserID")]
    public virtual User User { get; set; }

    [Required]
    public int EntityID { get; set; }
    [ForeignKey("EntityID")]
    public virtual Entry Entry { get; set; }
}

実行時に、次の例外が発生しました。

テーブル「EntryLikes」にFOREIGNKEY制約「FK_dbo.EntryLikes_dbo.Entries_EntityID」を導入すると、サイクルまたは複数のカスケードパスが発生する可能性があります。ON DELETENOACTIONまたはONUPDATENO ACTIONを指定するか、他のFOREIGNKEY制約を変更します。制約を作成できませんでした。以前のエラーを参照してください。

4

2 に答える 2

0

EntryLike および Entry の User と外部キー関係を持っているのはなぜですか? Entry クラスで Entry と User の間に関係があることを考えると、EntryLike と Entry の間の関係により推論できるため、EntryLike クラスでは必要ありません。また、EntryLike の外部キー id プロパティは、EntityID ではなく EntryID と呼ばれるべきですか?

編集: ユーザーへのカスケード パスが複数あるためです。1 つは Entry > User で、もう 1 つは EntryLike > Entry > User です。このエラーの発生を防ぐには、カスケード削除をオフにする必要があります。私がコメントに入れたリンクは、あなたを正しい軌道に乗せるはずです.

于 2012-12-16T13:38:19.507 に答える
0

関連する関係の少なくとも 1 つでカスケード削除を無効にする必要があります。カスケード削除は、必要なEntryLikeすべての 1 対多の関係に対してデフォルトでオンになっています。これには Fluent API が必要です。データ注釈では不可能です。例えば:

modelBuilder.Entity<EntryLike>()
    .HasRequired(el => el.Entry)
    .WithMany()
    .HasForeignKey(el => el.EntryID)
    .WillCascadeOnDelete(false);
于 2012-12-16T15:10:51.683 に答える