私は次のように2つのエンティティを持っている:Entity Frameworkのナビゲーションコレクションプロパティ削除
public class FirstEntity
{
public int Id { get; set; }
public ICollection<SecondEntity> SecondEntityCollection { get; set; }
}
public class SecondEntity
{
[Key]
[Column(Order = 0)]
public int FirstEntitySomeId { get; set; }
[Key]
[Column(Order = 1)]
public int SecondEntityId { get; set; }
}
マイModelBuilder
次私はFirstEntity
オブジェクトを削除する場合
modelBuilder.Entity<FirstEntity>()
.HasMany(x => x.SecondEntity)
.WithRequired()
.HasForeignKey(x => x.FirstEntitySomeId);
を以下のように設定されます。
をvar firstEntity=this.context.FirstEntities.Where(x=>x.Id==someId);
firstEntity.SecondEntityCollection.Clear();
this.context.FirstEntities.Remove(firstEntity);
this.context.SaveChanges();
しかし、まだ次の例外があります。
DELETEステートメントがREFERENCE制約 "...."と競合しました。競合は、データベース "データベース"、テーブル "dbo.SecondEntity"、列 "FirstEntitySomeId"で発生しました。
firstEntity
オブジェクトを削除する前にコレクションを適切に消去するにはどうすればよいですか?
私はを回避しようとしていることを言及する価値があります。カスケード削除。私は、データベース内の孤立したエントリを削除したいと思います。しかし、最良の解決策/実践がカスケード削除を使用する場合は、私はそれを使用します。
これは可能ですか?
「私はカスケード削除を避けようとしています。」つまり、孤児データをデータベースに保存する必要がありますか? – Sampath
いいえ、コレクションの子エントリも削除します。私は今、 'WillCascadeOnDelete()'の使用を避けようとしています。しかし、これが最善の選択肢なら、私はそれを使用します。 – pgerchev