在EF Code First中启用级联删除而不暴露外键

时间:2011-03-20 05:13:25

标签: entity-framework one-to-many code-first cascading-deletes

在不暴露外键的情况下执行一对多关系的删除时,EF会删除父记录并尝试使子记录上的外键为空。这当然会导致错误,因为外键不可为空。将外键添加到子类会覆盖此行为,但我宁愿不公开它。

例如,给定以下两个类,我不希望将JobId作为Project类的属性。

public class Job : ModelBase
{
    [Required]
    [StringLength(100)]
    public string Company { get; set; }

    [Required]
    [StringLength(100)]
    public string JobTitle { get; set; }

    public ICollection<Project> Projects { get; set; }
}

public class Project : ModelBase
{
    [Required]
    [StringLength(100)]
    public string Name { get; set; }

    [Required]
    public string Summary { get; set; }

    public int JobId { get; set; }
}

有没有办法在EF Code First中启用级联删除而不在关系的多方面暴露外键?

1 个答案:

答案 0 :(得分:14)

烨!删除JobId并添加以下内容:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Job>().HasMany(j => j.Projects).WithRequired();
    }

在数据库中,这将在PK / FK关系中添加级联删除。

(我假设你的ModelBase有一个整数Id =)