連鎖削除Cascade Delete

連鎖削除は、関連する行の削除を自動的にトリガーする行の削除を許可する特性を記述するデータベース用語で通常使用されます。Cascade delete is commonly used in database terminology to describe a characteristic that allows the deletion of a row to automatically trigger the deletion of related rows. EF コア削除動作覆われても、密接に関連する概念は、親との関係があるときに子エンティティの自動削除が切断されている--この i「孤立アイテムの削除」と呼ばれます。A closely related concept also covered by EF Core delete behaviors is the automatic deletion of a child entity when it's relationship to a parent has been severed--this i commonly known as "deleting orphans".

EF コアは、いくつかの別の削除動作を実装して、個々 のリレーションシップの削除の動作を構成できます。EF Core implements several different delete behaviors and allows for the configuration of the delete behaviors of individual relationships. EF コアも実装して、[リレーションシップの requiredness] に基づいてリレーションシップごとに役立つ既定削除動作を自動的に構成している表記規則 (../modeling/relationships.md#required-and-optional-relationships)。EF Core also implements conventions that automatically configure useful default delete behaviors for each relationship based on the requiredness of the relationship.

動作を削除します。Delete behaviors

削除の動作が定義されている、 DeleteBehavior列挙子を入力しに渡されることができます、 OnDelete fluent API を制御するかどうかの切断するプリンシパル/親エンティティの削除、依存する/子エンティティへのリレーションシップによっては、依存する/子エンティティに副作用が必要です。Delete behaviors are defined in the DeleteBehavior enumerator type and can be passed to the OnDelete fluent API to control whether the deletion of a principal/parent entity or the severing of the relationship to dependent/child entities should have a side effect on the dependent/child entities.

プリンシパル/親エンティティを削除または子へのリレーションシップが切断された場合に、EF は実行できる 3 つの操作です。There are three actions EF can take when a principal/parent entity is deleted or the relationship to the child is severed:

  • 子/依存ファイルを削除することができます。The child/dependent can be deleted
  • 子の外部キーの値を設定することができますを null にThe child's foreign key values can be set to null
  • 子が変更されません。The child remains unchanged

注意

EF の主要なモデルで構成されている、delete の動作は EF コアを使用してプリンシパル エンティティが削除され、依存エンティティは (つまり追跡対象の依存ファイル) のメモリに読み込まれるときにのみ適用されます。The delete behavior configured in the EF Core model is only applied when the principal entity is deleted using EF Core and the dependent entities are loaded in memory (i.e. for tracked dependents). 対応するカスケード動作は、データベースは、コンテキストによって追跡されていないデータを確実にセットアップには、適用するために必要なアクションである必要があります。A corresponding cascade behavior needs to be setup in the database to ensure data that is not being tracked by the context has the necessary action applied. EF コアを使用して、データベースを作成するこの連鎖動作がセットアップするためになります。If you use EF Core to create the database, this cascade behavior will be setup for you.

2 番目のアクションの外部キーの値を null に設定が正しくない場合、外部キー値が許容されません。For the second action above, setting a foreign key value to null is not valid if foreign key is not nullable. (Null 非許容の外部キーは、必要なリレーションシップに相当) です。このような場合は、EF コアは、SaveChanges が呼び出されると、データベースに変更を永続化することはできませんのでれた時点で例外がスローされるまでに、外部キー プロパティが null としてマークされているを追跡します。(A non-nullable foreign key is equivalent to a required relationship.) In these cases, EF Core tracks that the foreign key property has been marked as null until SaveChanges is called, at which time an exception is thrown because the change cannot be persisted to the database. データベースからの制約に違反することに似ています。This is similar to getting a constraint violation from the database.

動作を削除 4 つ以下の表に記載されています。There are four delete behaviors, as listed in the tables below. 省略可能なリレーションシップ (null 許容の外部キー) の場合、は_null 外部キーの値、その結果、次の影響を保存します。For optional relationships (nullable foreign key) it _is possible to save a null foreign key value, which results in the following effects:

動作名Behavior Name メモリに依存する/子への影響Effect on dependent/child in memory データベースに依存する/子への影響Effect on dependent/child in database
CascadeCascade エンティティが削除されます。Entities are deleted エンティティが削除されます。Entities are deleted
ClientSetNull (既定)ClientSetNull (Default) 外部キー プロパティが設定を null にForeign key properties are set to null なしNone
SetNullSetNull 外部キー プロパティが設定を null にForeign key properties are set to null 外部キー プロパティが設定を null にForeign key properties are set to null
制限します。Restrict なしNone なしNone

必要なリレーションシップ (null 非許容の外部キー) は_いない_null 外部キーの値、その結果、次の影響を保存します。For required relationships (non-nullable foreign key) it is not possible to save a null foreign key value, which results in the following effects:

動作名Behavior Name メモリに依存する/子への影響Effect on dependent/child in memory データベースに依存する/子への影響Effect on dependent/child in database
Cascade (既定)Cascade (Default) エンティティが削除されます。Entities are deleted エンティティが削除されます。Entities are deleted
ClientSetNullClientSetNull SaveChanges がスローされます。SaveChanges throws なしNone
SetNullSetNull SaveChanges がスローされます。SaveChanges throws SaveChanges がスローされます。SaveChanges throws
制限します。Restrict なしNone なしNone

上記の表でNone制約違反が発生することができます。In the tables above, None can result in a constraint violation. たとえば、プリンシパル/子エンティティが削除された場合は、依存する/子の外部キーを変更するアクションは実行されませんし、データベース可能性がありますがスローされます SaveChanges で外部制約違反のため。For example, if a principal/child entity is deleted but no action is taken to change the foreign key of a dependent/child, then the database will likely throw on SaveChanges due to a foreign constraint violation.

レベルが高い場合。At a high level:

  • 存在するために、親エンティティが存在して、子を自動的に削除するために対処するための EF しを使用する場合Cascadeです。If you have entities that cannot exist without a parent, and you want EF to take care for deleting the children automatically, then use Cascade.
    • 通常、親は、なしに存在できないエンティティを必要なリレーションシップを使用してCascade既定値です。Entities that cannot exist without a parent usually make use of required relationships, for which Cascade is the default.
  • 処理する際は、外部キーがない、EF しを使用して、親がない可能性がありますまたは可能性のあるエンティティをした場合ClientSetNullIf you have entities that may or may not have a parent, and you want EF to take care of nulling out the foreign key for you, then use ClientSetNull
    • 通常、親は、なしに存在可能なエンティティを省略可能なリレーションシップを使用してClientSetNull既定値です。Entities that can exist without a parent usually make use of optional relationships, for which ClientSetNull is the default.
    • 子の外部キーに null 値を伝達しようとするデータベースの場合と、子エンティティが読み込まれていない、を使用してSetNullです。If you want the database to also try to propagate null values to child foreign keys even when the child entity is not loaded, then use SetNull. ただし、データベースには、これをサポートする必要があり、次のようにデータベースを構成することができますと、その他の制限を実際に多くの場合、このオプションができなくなります。However, note that the database must support this, and configuring the database like this can result in other restrictions, which in practice often makes this option impractical. その理由はSetNullは既定ではありません。This is why SetNull is not the default.
  • EF コアしれたエンティティを自動的に削除または外部キーに自動的には、null を使用したくない場合Restrictです。If you don't want EF Core to ever delete an entity automatically or null out the foreign key automatically, then use Restrict. 注意が必要であること、コード子エンティティと、外部キーの値の同期を保つ手動でそれ以外の場合の制約の例外がスローされます。Note that this requires that your code keep child entities and their foreign key values in sync manually otherwise constraint exceptions will be thrown.

注意

EF6 とは異なり、EF コアで連鎖的な影響実行されないが、すぐに、代わりに SaveChanges が呼び出されたときだけです。In EF Core, unlike EF6, cascading effects do not happen immediately, but instead only when SaveChanges is called.

注意

EF コア 2.0 での変更:以前のリリースで制限原因となる省略可能な外部キーのプロパティを設定する追跡対象の依存エンティティは null、既定値は省略可能なリレーションシップの動作を削除します。Changes in EF Core 2.0: In previous releases, Restrict would cause optional foreign key properties in tracked dependent entities to be set to null, and was the default delete behavior for optional relationships. EF コア 2.0 で、 ClientSetNullをその動作を表す導入され、省略可能なリレーションシップの既定値になりました。In EF Core 2.0, the ClientSetNull was introduced to represent that behavior and became the default for optional relationships. 動作Restrict依存エンティティのすべての副作用を持たないは調整されました。The behavior of Restrict was adjusted to never have any side effects on dependent entities.

エンティティの削除の例Entity deletion examples

次のコードの一部である、サンプル実行をダウンロードすることができます。The code below is part of a sample that can be downloaded an run. このサンプルでは、親エンティティが削除されたときの各オプションと必須の両方のリレーションシップの削除の動作の動作を示します。The sample shows what happens for each delete behavior for both optional and required relationships when a parent entity is deleted.

var blog = context.Blogs.Include(b => b.Posts).First();
var posts = blog.Posts.ToList();

DumpEntities("  After loading entities:", context, blog, posts);

context.Remove(blog);

DumpEntities($"  After deleting blog '{blog.BlogId}':", context, blog, posts);

try
{
    Console.WriteLine();
    Console.WriteLine("  Saving changes:");

    context.SaveChanges();

    DumpSql();

    DumpEntities("  After SaveChanges:", context, blog, posts);
}
catch (Exception e)
{
    DumpSql();

    Console.WriteLine();
    Console.WriteLine($"  SaveChanges threw {e.GetType().Name}: {(e is DbUpdateException ? e.InnerException.Message : e.Message)}");
}

何が起こっているかを理解するには、各バリエーションについて説明しましょう。Let's walk through each variation to understand what is happening.

必須またはオプションの関係を持つ DeleteBehavior.CascadeDeleteBehavior.Cascade with required or optional relationship

  After loading entities:
    Blog '1' is in state Unchanged with 2 posts referenced.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.

  After deleting blog '1':
    Blog '1' is in state Deleted with 2 posts referenced.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.

  Saving changes:
    DELETE FROM [Posts] WHERE [PostId] = 1
    DELETE FROM [Posts] WHERE [PostId] = 2
    DELETE FROM [Blogs] WHERE [BlogId] = 1

  After SaveChanges:
    Blog '1' is in state Detached with 2 posts referenced.
      Post '1' is in state Detached with FK '1' and no reference to a blog.
      Post '1' is in state Detached with FK '1' and no reference to a blog.
  • ブログが削除済みとしてマークされています。Blog is marked as Deleted
  • 投稿初期状態のまま Unchanged SaveChanges まで連鎖が発生しないためPosts initially remain Unchanged since cascades do not happen until SaveChanges
  • SaveChanges が両方の依存/子 (投稿) を次のプリンシパル/親 (ブログ) の削除を送信します。SaveChanges sends deletes for both dependents/children (posts) and then the principal/parent (blog)
  • データベースから削除されているようになりましたので、保存した後のすべてのエンティティがデタッチ済みAfter saving, all entities are detached since they have now been deleted from the database

DeleteBehavior.ClientSetNull または必要なリレーションシップを持つ DeleteBehavior.SetNullDeleteBehavior.ClientSetNull or DeleteBehavior.SetNull with required relationship

  After loading entities:
    Blog '1' is in state Unchanged with 2 posts referenced.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.

  After deleting blog '1':
    Blog '1' is in state Deleted with 2 posts referenced.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.

  Saving changes:
    UPDATE [Posts] SET [BlogId] = NULL WHERE [PostId] = 1

  SaveChanges threw DbUpdateException: Cannot insert the value NULL into column 'BlogId', table 'EFSaving.CascadeDelete.dbo.Posts'; column does not allow nulls. UPDATE fails. The statement has been terminated.
  • ブログが削除済みとしてマークされています。Blog is marked as Deleted
  • 投稿初期状態のまま Unchanged SaveChanges まで連鎖が発生しないためPosts initially remain Unchanged since cascades do not happen until SaveChanges
  • Post FK を null に設定、SaveChanges が試行されますが、外部キーが null 許容ではないためにこれが失敗します。SaveChanges attempts to set the post FK to null, but this fails because the FK is not nullable

DeleteBehavior.ClientSetNull または省略可能なリレーションシップを持つ DeleteBehavior.SetNullDeleteBehavior.ClientSetNull or DeleteBehavior.SetNull with optional relationship

  After loading entities:
    Blog '1' is in state Unchanged with 2 posts referenced.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.

  After deleting blog '1':
    Blog '1' is in state Deleted with 2 posts referenced.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.

  Saving changes:
    UPDATE [Posts] SET [BlogId] = NULL WHERE [PostId] = 1
    UPDATE [Posts] SET [BlogId] = NULL WHERE [PostId] = 2
    DELETE FROM [Blogs] WHERE [BlogId] = 1

  After SaveChanges:
    Blog '1' is in state Detached with 2 posts referenced.
      Post '1' is in state Unchanged with FK 'null' and no reference to a blog.
      Post '1' is in state Unchanged with FK 'null' and no reference to a blog.
  • ブログが削除済みとしてマークされています。Blog is marked as Deleted
  • 投稿初期状態のまま Unchanged SaveChanges まで連鎖が発生しないためPosts initially remain Unchanged since cascades do not happen until SaveChanges
  • SaveChanges 試行を null に、プリンシパル/親 (ブログ) を削除する前に両方の依存/子供 (投稿) の外部キーを設定します。SaveChanges attempts sets the FK of both dependents/children (posts) to null before deleting the principal/parent (blog)
  • 保存した後、プリンシパル/親 (ブログ) 削除されますが、追跡されます dependents/子供 (投稿)After saving, the principal/parent (blog) is deleted, but the dependents/children (posts) are still tracked
  • 追跡対象の依存/子供 (投稿) ようになりました FK の null 値を持ち、親への参照、削除されたプリンシパル/(ブログ) は削除されましたThe tracked dependents/children (posts) now have null FK values and their reference to the deleted principal/parent (blog) has been removed

必須またはオプションの関係を持つ DeleteBehavior.RestrictDeleteBehavior.Restrict with required or optional relationship

  After loading entities:
    Blog '1' is in state Unchanged with 2 posts referenced.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.

  After deleting blog '1':
    Blog '1' is in state Deleted with 2 posts referenced.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.

  Saving changes:
  SaveChanges threw InvalidOperationException: The association between entity types 'Blog' and 'Post' has been severed but the foreign key for this relationship cannot be set to null. If the dependent entity should be deleted, then setup the relationship to use cascade deletes.
  • ブログが削除済みとしてマークされています。Blog is marked as Deleted
  • 投稿初期状態のまま Unchanged SaveChanges まで連鎖が発生しないためPosts initially remain Unchanged since cascades do not happen until SaveChanges
  • Restrict自動的に、外部キーを null に設定、EF に指示して、null 以外は状態、保存せずに SaveChanges がスローされますSince Restrict tells EF to not automatically set the FK to null, it remains non-null and SaveChanges throws without saving

孤立ファイルの例の削除Delete orphans examples

次のコードの一部である、サンプル実行をダウンロードすることができます。The code below is part of a sample that can be downloaded an run. このサンプルでは、親/プリンシパルとその子/依存オブジェクト間のリレーションシップが切断されたときの各オプションと必須の両方のリレーションシップの削除の動作の動作を示します。The sample shows what happens for each delete behavior for both optional and required relationships when the relationship between a parent/principal and its children/dependents is severed. この例では、リレーションシップは、プリンシパル/親 (ブログ) のコレクション ナビゲーション プロパティから依存ファイル/子供 (投稿) を削除することによって切断されます。In this example, the relationship is severed by removing the dependents/children (posts) from the collection navigation property on the principal/parent (blog). ただし、動作は代わりに依存する/子からのプリンシパル/親への参照は null にする場合と同じです。However, the behavior is the same if the reference from dependent/child to principal/parent is instead nulled out.

var blog = context.Blogs.Include(b => b.Posts).First();
var posts = blog.Posts.ToList();

DumpEntities("  After loading entities:", context, blog, posts);

blog.Posts.Clear();

DumpEntities("  After making posts orphans:", context, blog, posts);

try
{
    Console.WriteLine();
    Console.WriteLine("  Saving changes:");

    context.SaveChanges();

    DumpSql();

    DumpEntities("  After SaveChanges:", context, blog, posts);
}
catch (Exception e)
{
    DumpSql();

    Console.WriteLine();
    Console.WriteLine($"  SaveChanges threw {e.GetType().Name}: {(e is DbUpdateException ? e.InnerException.Message : e.Message)}");
}

何が起こっているかを理解するには、各バリエーションについて説明しましょう。Let's walk through each variation to understand what is happening.

必須またはオプションの関係を持つ DeleteBehavior.CascadeDeleteBehavior.Cascade with required or optional relationship

  After loading entities:
    Blog '1' is in state Unchanged with 2 posts referenced.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.

  After making posts orphans:
    Blog '1' is in state Unchanged with 2 posts referenced.
      Post '1' is in state Modified with FK '1' and no reference to a blog.
      Post '1' is in state Modified with FK '1' and no reference to a blog.

  Saving changes:
    DELETE FROM [Posts] WHERE [PostId] = 1
    DELETE FROM [Posts] WHERE [PostId] = 2

  After SaveChanges:
    Blog '1' is in state Unchanged with 2 posts referenced.
      Post '1' is in state Detached with FK '1' and no reference to a blog.
      Post '1' is in state Detached with FK '1' and no reference to a blog.
  • Null としてマークする外部キー リレーションシップを切断する原因となったために、投稿が変更済みとしてマークされます。Posts are marked as Modified because severing the relationship caused the FK to be marked as null
    • FK が null 許容でない場合、実際の値は変わりません null に設定されている場合でもIf the FK is not nullable, then the actual value will not change even though it is marked as null
  • SaveChanges は、dependents/子供 (投稿) の削除を送信します。SaveChanges sends deletes for dependents/children (posts)
  • データベースから削除されているようになりましたので、保存した後、依存オブジェクト/子供 (投稿) がデタッチされました。After saving, the dependents/children (posts) are detached since they have now been deleted from the database

DeleteBehavior.ClientSetNull または必要なリレーションシップを持つ DeleteBehavior.SetNullDeleteBehavior.ClientSetNull or DeleteBehavior.SetNull with required relationship

  After loading entities:
    Blog '1' is in state Unchanged with 2 posts referenced.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.

  After making posts orphans:
    Blog '1' is in state Unchanged with 2 posts referenced.
      Post '1' is in state Modified with FK 'null' and no reference to a blog.
      Post '1' is in state Modified with FK 'null' and no reference to a blog.

  Saving changes:
    UPDATE [Posts] SET [BlogId] = NULL WHERE [PostId] = 1

  SaveChanges threw DbUpdateException: Cannot insert the value NULL into column 'BlogId', table 'EFSaving.CascadeDelete.dbo.Posts'; column does not allow nulls. UPDATE fails. The statement has been terminated.
  • Null としてマークする外部キー リレーションシップを切断する原因となったために、投稿が変更済みとしてマークされます。Posts are marked as Modified because severing the relationship caused the FK to be marked as null
    • FK が null 許容でない場合、実際の値は変わりません null に設定されている場合でもIf the FK is not nullable, then the actual value will not change even though it is marked as null
  • Post FK を null に設定、SaveChanges が試行されますが、外部キーが null 許容ではないためにこれが失敗します。SaveChanges attempts to set the post FK to null, but this fails because the FK is not nullable

DeleteBehavior.ClientSetNull または省略可能なリレーションシップを持つ DeleteBehavior.SetNullDeleteBehavior.ClientSetNull or DeleteBehavior.SetNull with optional relationship

  After loading entities:
    Blog '1' is in state Unchanged with 2 posts referenced.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.

  After making posts orphans:
    Blog '1' is in state Unchanged with 2 posts referenced.
      Post '1' is in state Modified with FK 'null' and no reference to a blog.
      Post '1' is in state Modified with FK 'null' and no reference to a blog.

  Saving changes:
    UPDATE [Posts] SET [BlogId] = NULL WHERE [PostId] = 1
    UPDATE [Posts] SET [BlogId] = NULL WHERE [PostId] = 2

  After SaveChanges:
    Blog '1' is in state Unchanged with 2 posts referenced.
      Post '1' is in state Unchanged with FK 'null' and no reference to a blog.
      Post '1' is in state Unchanged with FK 'null' and no reference to a blog.
  • Null としてマークする外部キー リレーションシップを切断する原因となったために、投稿が変更済みとしてマークされます。Posts are marked as Modified because severing the relationship caused the FK to be marked as null
    • FK が null 許容でない場合、実際の値は変わりません null に設定されている場合でもIf the FK is not nullable, then the actual value will not change even though it is marked as null
  • SaveChanges を null に両方の依存/子供 (投稿) の外部キーを設定します。SaveChanges sets the FK of both dependents/children (posts) to null
  • 保存した後 dependents/子供 (投稿) ようになりました FK の null 値を持ち、親への参照、削除されたプリンシパル/(ブログ) は削除されましたAfter saving, the dependents/children (posts) now have null FK values and their reference to the deleted principal/parent (blog) has been removed

必須またはオプションの関係を持つ DeleteBehavior.RestrictDeleteBehavior.Restrict with required or optional relationship

  After loading entities:
    Blog '1' is in state Unchanged with 2 posts referenced.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.
      Post '1' is in state Unchanged with FK '1' and reference to blog '1'.

  After making posts orphans:
    Blog '1' is in state Unchanged with 2 posts referenced.
      Post '1' is in state Modified with FK '1' and no reference to a blog.
      Post '1' is in state Modified with FK '1' and no reference to a blog.

  Saving changes:
  SaveChanges threw InvalidOperationException: The association between entity types 'Blog' and 'Post' has been severed but the foreign key for this relationship cannot be set to null. If the dependent entity should be deleted, then setup the relationship to use cascade deletes.
  • Null としてマークする外部キー リレーションシップを切断する原因となったために、投稿が変更済みとしてマークされます。Posts are marked as Modified because severing the relationship caused the FK to be marked as null
    • FK が null 許容でない場合、実際の値は変わりません null に設定されている場合でもIf the FK is not nullable, then the actual value will not change even though it is marked as null
  • Restrict自動的に、外部キーを null に設定、EF に指示して、null 以外は状態、保存せずに SaveChanges がスローされますSince Restrict tells EF to not automatically set the FK to null, it remains non-null and SaveChanges throws without saving

追跡対象でないエンティティにカスケードCascading to untracked entities

呼び出すとSaveChanges、cascade delete ルールは、コンテキストによって追跡されているすべてのエンティティに適用されます。When you call SaveChanges, the cascade delete rules will be applied to any entities that are being tracked by the context. これは、すべての前に示した例では、これが理由をプリンシパル/親 (ブログ) とすべての依存/の子 (投稿) の両方を削除する SQL が生成されました。This is the situation in all the examples shown above, which is why SQL was generated to delete both the principal/parent (blog) and all the dependents/children (posts):

    DELETE FROM [Posts] WHERE [PostId] = 1
    DELETE FROM [Posts] WHERE [PostId] = 2
    DELETE FROM [Blogs] WHERE [BlogId] = 1

プリンシパルが読み込まれる--だけの場合など、クエリが行われる場合せずブログ、Include(b => b.Posts)投稿--含めることも、SaveChanges のみが生成されますをプリンシパル/親を削除する SQL:If only the principal is loaded--for example, when a query is made for a blog without an Include(b => b.Posts) to also include posts--then SaveChanges will only generate SQL to delete the principal/parent:

    DELETE FROM [Blogs] WHERE [BlogId] = 1

依存オブジェクトまたは子 (投稿) は、データベースが構成されている対応するカスケード動作にのみ削除されます。The dependents/children (posts) will only be deleted if the database has a corresponding cascade behavior configured. EF を使用してデータベースを作成すると、この連鎖動作がセットアップするためになります。If you use EF to create the database, this cascade behavior will be setup for you.