Entity Framework6 防止删除

Entity Framework 6 preventing deletion

如何让 EF 不允许删除相关实体?例如:

public class Enrollment 
{
    public int EnrollmentId { get; set; }
    public virtual ICollection<Course> courses { get; set; }
}

public class Course 
{
    public int CourseId { get; set; }
    public string Name { get; set; }
}

当我创建课程 A 和 B,然后我创建一个注册并将这些课程添加到其中时,我需要它不允许我删除课程 A 或 B。当我 运行 它通过我的 MVC 控制器没有问题:

Course course = db.Courses.Find(id);
db.Courses.Remove(course);
db.SaveChanges();

我什至不确定要搜索什么。我认为它正在强制执行或启用多对多引用约束?但我似乎什么也没找到。我不应该期望它自动做出该约束吗?我想我总是可以将以下行添加到删除控制器:

if(db.Enrollments.Any(e => e.Courses.Any(c => c.CourseId == id)))
{ //error }

此外,尝试以下 fluentAPI 无效(在许多变体中):

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Enrollment>()
               .HasMany<Course>(e => e.Courses)
               .WithRequired()
               .WillCascadeOnDelete(false);
        modelBuilder.Entity<Course>()
               .HasMany(e => e.Enrollments);
        base.OnModelCreating(modelBuilder);
    }

How do you make EF not allow deletion of a related entity?

您想防止删除正在使用的东西,对吗?课程和入学人数是多对多关系吗?默认情况下,多对多不会级联删除。试试改成这样。

public class Enrollment 
{
    public int EnrollmentId { get; set; }
    public virtual ICollection<Course> Courses { get; set; }
}

public class Course 
{
    public int CourseId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Enrollment> Enrollments { get; set; }
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    //Need this to remove the cascade convention.
    modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
}