假设以下类:
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 执行此操作以避免不必要的查询?