EF4.1代码优先:如何为依赖实体中没有导航属性的关系禁用删除级联

本文关键字:属性 导航 关系 级联 删除 实体 代码 依赖 EF4 | 更新日期: 2023-09-27 18:22:21

假设我有这两个非常基本的实体:

public class ParentEntity
{
   public int Id;
   public virtual ICollection<ChildEntity> Childrens;
}
public class ChildEntity
{
   public int Id;
   public int ParentEntityId; // Foreign Key
   public virtual ParentEntity parent; // [NOTWANTED]
}

出于某些原因,我不希望ChildEntity保留对其父母的引用。我只想让它保留ParentEntity id,但仅此而已。到目前为止,没问题,我只是删除了[NOTWANTED]行,一切都如预期。

我的问题是:在这种特定情况下,如何禁用级联删除?

如果我仍然有父导航属性,那就很容易了:

modelBuilder.Entity<ChildEntity>()
    .HasRequired(c => c.parent)
    .WithMany(p => p.Childrens)
    .WillCascadeOndelete(false)

但是,如果没有导航属性,我不知道如何在删除时禁用级联(当然,不全局禁用,也不按表禁用,只针对关系禁用)。

我现在所做的是将外键设置为可为null的int,以便在删除时禁用级联,但这并不漂亮:

public int? ParentEntityId; // Foreign Key - nullable just to disable cascade on delete

如何使用流利的API使其工作?认为这应该是可能的。

EF4.1代码优先:如何为依赖实体中没有导航属性的关系禁用删除级联

您必须从关联的另一端配置它:

modelBuilder.Entity<ParentEntity>()
    .HasMany(p => p.Children)
    .WithRequired()
    .HasForeignKey(c => c.ParentEntityId)
    .WillCascadeOnDelete(false);