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>();
}
如何让 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>();
}