2016-06-23 16 views
2

子コレクションを修正して保存を実行するときに最初にEF6コードを使用していますが、保存は実行されますが、Db行は削除されません。コレクションからコレクションを削除したときにEF6でデータベースからオブジェクトを削除するにはどうすればよいですか?

ベーシックモデル

public class Building 
{ 
    int Id {get;set;} 
    ICollection<BuildingFloors> BuildingFloors 
}  

public class BuildingFloors 
{ 
    int id 
} 

私は現在のリストをクリアしていますコレクションを保存するとき、私はその後

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Model.Building>() 
       .HasMany(t => t.BuildingFloors) 
       .WithOptional(d => d.Building) 
       .WillCascadeOnDelete(true); 

    base.OnModelCreating(modelBuilder); 
} 

ようDBContextでカスケードを設定しています。

building.BuildingFloors.Clear(); 

次に、新しい値を追加します。

foreach(var floor in FloorCollection) 
{ 
    building.BuildingFloors.Add(buildingFloor); 
} 

コレクションから削除されたオブジェクトをデータベースから削除するにはどうすればよいですか?

+0

あなたがすることはできませんする必要があります右、私はまた、外部キーの関係に

を設定するために必要な例外を除いていました。しかし、dbcontextからオブジェクトを削除すると、コレクションからも削除されます。 –

+0

Btw。関係を0対1対多でなく1対多に変更すると、それはそのままで動作します。 –

+0

どうすればいいのか説明できますか? – TheAlbear

答えて

0

mg。そのbuildingfloorsクラスは

public class BuildingFloors 
{ 
    int id 

    //forgin key 
    int Building_Id 
} 

にする必要があるとのマッピングが

modelBuilder.Entity<Model.Building>() 
    .HasMany(t => t.BuildingFloors) 
    .WithRequired() 
    .HasForeignKey(t => t.Building_Id) 
    .WillCascadeOnDelete(true); 
関連する問題