イメージ エンティティとプロジェクト エンティティの両方で ICollection を定義することにより、EF CTP4 の既定の規則を使用して多対多のリレーションシップを作成しました。
マッピング テーブルは次のように作成されます。
create table [dbo].[Images_Project] (
[Images_Id] [uniqueidentifier] not null,
[Project_Id] [uniqueidentifier] not null,
primary key ([Images_Id]));
残念ながら、プロジェクトを削除すると、削除がイメージ マッピング テーブルにカスケードされません。
Imanges_Id プロパティと Project_Id プロパティの両方で EF がキーを生成することを期待していますが、そうではありません。プロジェクトが削除されたときにイメージ マッピングを削除するように EF を構成するにはどうすればよいですか? (イメージ レコードではなく、イメージ マッピング レコードのみ)
ありがとう
[アップデート]
カスケードは明らかに不可能ですが、次のテストに合格する理由は何か:
[Test]
public void Can_delete_project_with_images()
{
var project = new Project { Title = "Test project" };
var image = new Image { Title = "Some image" };
project.AddImage(image);
context.Set<Project>().Add(project);
context.SaveChanges();
object id = project.Id;
object imageId = image.Id;
var fromDb = context.Projects.Find(id);
fromDb.ShouldNotBeNull();
context.Set<Project>().Remove(fromDb);
context.SaveChanges();
var fromDb2 = context.Images.Find(imageId);
fromDb2.ShouldNotBeNull();
fromDb2.Title.ShouldEqual("Some image");
}