【发布时间】:2015-07-20 23:50:52
【问题描述】:
我有两个实体具有可选的一对多关系定义和配置如下:
public class A
{
// ...
public int? BId { get; set; }
public B B { get; set; }
}
public class B
{
// ...
public virtual ICollection<A> As { get; set; }
}
public class AConfiguration : EntityTypeConfiguration<A>
{
public A()
{
// ...
HasOptional(r => r.B).WithMany(r => r.As).HasForeignKey(r => r.BId);
}
}
在删除类型 B 的实体时,我希望所有类型 A 的实体都具有被删除的 B 实体的外键,并将 BId 外键设置为 null。删除操作是这样定义的:
public void DeleteB(int bId)
{
var entity = _context.Bs.Single(b => b.Id == bId);
_context.Bs.Remove(entity);
_context.SaveChanges();
}
但是这不会发生。 B 类型的实体已成功删除,但 A 实体上的 BId 仍为非 null,任何其他对 .SaveChanges() 的调用都会引发异常,因为这些 BId 正在引用不再存在的行。
如何删除 B 实体,使 BId 属性无效,而无需在删除操作期间手动迭代集合?
【问题讨论】:
标签: c# sql-server entity-framework ef-code-first