0

ATemplateは、ゼロまたは多数Documentおよびゼロまたは多数を持つことができますMetaIndex。ADocumentは 0 個以上を持つことができIndex、 aMetaIndexも 0 個以上を持つことができますIndex:

ここに画像の説明を入力

これは潜在的なカスケードの問題を表していTemplateますDocument。aDocumentを削除すると、そのも削除されますがIndex、これも問題ありません。しかし、 を削除TemplateしようとするとMetaIndex( も削除されIndexます )、問題が発生します (サイクル)。

私は問題を理解しています。それを解決する方法は、テンプレートを削除するとドキュメントとそのドキュメントのインデックス、およびテンプレートに関連付けられたメタインデックスが削除されることを指定することだと思います。しかし、メタディクスが関連するインデックスをカスケード削除しないため、サイクルは表示されません。

ここで潜在的な解決策を探して、私はこれを試しました:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<MetaIndex>().HasMany<Index>(m => m.IndicesEnteros).WithRequired().WillCascadeOnDelete(false);
}

しかし、それは機能していません:

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

4

1 に答える 1

0

最後に、ドキュメントを読んで読み直した後、動作させることができましたが、プロパティの順序は理解できました。他の人に役立つ場合に備えて、独自のソリューションを投稿しています。

インデックスには必要な MetaIndex があります (null 非許容であるため、存在する場合、カスケード削除は作成されませんでした)。次は、ナビゲートする方法を指定します (WithMany、MetaIndex クラスのコレクション プロパティは Indices です)。最後に、(標準に従って) MetaIndexID である外部キー フィールドの名前を指定する必要があります。次に、カスケード削除が不要であることを指定できます。したがって、カスケードでインデックスを削除する唯一の方法は、ドキュメントを削除することです(これは私が望んでいたことです)。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{

    modelBuilder.Entity<Index>()
        .HasRequired(index => index.MetaIndex)
        .WithMany(metaIndex => metaIndex.Indices)
        .HasForeignKey(index => index.MetaIndexID)
        .WillCascadeOnDelete(false);

    base.OnModelCreating(modelBuilder);
}
于 2015-04-28T20:17:28.837 に答える