【发布时间】:2023-04-09 22:50:01
【问题描述】:
是否可以选择性地删除 Entity Framework 5 Code First 中自动生成的多对多链接表上的级联删除选项?这是一个需要它的简单示例:
public class Parent
{
public int Id { get; set; }
public virtual IList<ChildA> As { get; set; }
public virtual IList<ChildB> Bs { get; set; }
}
public class ChildA
{
public int Id { get; set; }
[Required]
public virtual Parent Parent { get; set; }
public virtual IList<ChildB> ChildBJoins { get; set; }
}
public class ChildB
{
public int Id { get; set; }
[Required]
public virtual Parent Parent { get; set; }
public virtual IList<ChildA> ChildAJoins { get; set; }
}
public class TestContext : DbContext
{
public DbSet<Parent> Parents { get; set; }
public DbSet<ChildA> As { get; set; }
public DbSet<ChildB> Bs { get; set; }
}
由于链接表上引入了级联删除选项,当前形式的此上下文将不适用于数据库。如果我要创建手动链接表,我可以使用 Fluent API 将其一侧配置为不级联,但该选项在多对多关系中不可用。
我知道我可以通过删除 ManyToManyCascadeDeleteConvention 按照this question 禁用所有多对多连接上的级联删除,但这不是我所追求的 - 我只是希望能够做到它适用于一种关系,或者理想情况下是一种关系的一侧。
【问题讨论】:
-
您可能必须在
Parent-ChildA或Parent-ChildB一对多关系上禁用级联删除才能解决问题。 -
我不想那样做——我想把这种关系留在那里,从多对多中删除。如果我创建一个手动链接实体,我可以做到这一点,但找不到自动链接实体的方法。
标签: entity-framework ef-code-first entity-framework-5