如何使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();我甚至不知道到底该找什么。我认为它是在强制执行还是允许许多引用约束?但我似乎什么都没找到。难道我不应该期望它自动地做出这种约束吗?我想我总是可以在Delete控制器中添加以下一行:
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);
}发布于 2015-11-06 09:18:16
如何使EF不允许删除相关实体?
你想要防止删除使用中的东西,对吗?课程和入学之间是否有很多的关系?在默认情况下,许多人对许多人都不会在delete上级联。试着改变一下。
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>();
}https://stackoverflow.com/questions/33559228
复制相似问题