次のクラスがあるとします。
public class Parent
{
public Int32 Id
{
get; set;
}
public String Name
{
get; set;
}
public virtual IList<Child> Children
{
get; set;
}
}
public class Child
{
public Int32 Id
{
get; set;
}
public String Name
{
get; set;
}
[Required]
public virtual Parent Owner
{
get; set;
}
}
この方法でいくつかの子レコードを削除しようとすると、問題に直面しています:
using (var db = new Context())
{
var DummyInstance = new Child { Id = 1 };
db.Set<Child>().Attach(DummyInstance);
db.Set<Child>().Remove(DummyInstance);
db.SaveChanges();
}
次のようにDbUpdateExceptionをスローします。
「Context.Children」のエンティティは、「Child_Owner」関係に参加します。
0 件の関連する 'Child_Owner_Target' が見つかりました。
1 'Child_Owner_Target' が必要です。
私の意図は、削除されるオブジェクトのクエリを回避することです。親オブジェクトのダミーインスタンスも割り当てる場合にのみ、それを達成できます。
var DummyInstance = new Child { Id = 1, Owner = new Parent { Id = 1 } };
ただし、親 Id は常に知られているわけではありません (さらに、適切なアプローチではないようです)。不要なクエリを回避して EF にこの操作を実行させる方法はありますか?