Asp.net mvc 如何在实体框架C#上级联删除而不编辑关系模型

Asp.net mvc 如何在实体框架C#上级联删除而不编辑关系模型,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,在上一个问题中,我在同时将多个模型保存在一个对象中时遇到了一个问题 是否有更简单的方法删除数据库中的多个模型 public class Student { [Required] public int Id { get; set; } public virtual List<SyTerm> SyTerm { get; set; } } public class SyTerm { [Required] public int Id { get; s

在上一个问题中,我在同时将多个模型保存在一个对象中时遇到了一个问题

是否有更简单的方法删除数据库中的多个模型

public class Student
{
    [Required]
    public int Id { get; set; }
    public virtual List<SyTerm> SyTerm { get; set; }
}

public class SyTerm
{
    [Required]
    public int Id { get; set; }
    public virtual List<Course> Courses { get; set; }
}
public class Course
{
    [Required]
    public int Id { get; set; }
}
公共班级学生
{
[必需]
公共int Id{get;set;}
公共虚拟列表SyTerm{get;set;}
}
公共类综合术语
{
[必需]
公共int Id{get;set;}
公共虚拟列表课程{get;set;}
}
公共课
{
[必需]
公共int Id{get;set;}
}
删除所有内容的可靠方法是获取所有元素并逐个删除,但是否有一种方法可以删除Student对象并自动删除所有SyTerms,并从SyTerms中删除与之关联的所有课程?

您可以使用该方法显式配置关系。一种方法是覆盖上下文类上的
OnModelCreating
方法:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{


      modelBuilder.Entity<SyTerm>() 
                  .HasRequired() 
                  .WithMany(s => s.SyTerm) 
                  .WillCascadeOnDelete(true); 

      modelBuilder.Entity<Course>() 
                  .HasRequired() 
                  .WithMany(s => s.Courses) 
                  .WillCascadeOnDelete(true); 
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.hassrequired()
.WithMany(s=>s.SyTerm)
.WillCascadeOnDelete(真);
modelBuilder.Entity()
.hassrequired()
.有许多(s=>s.课程)
.WillCascadeOnDelete(真);
}

如果需要两个实体之间的关系,则EF默认设置为级联删除,所以在你的情况下,你不能在你的关系配置中调用
WillCascadeOnDelete
,但我个人更喜欢明确地这样做,以了解我在做什么。

你不想在数据库级别设置cascade delete吗?我也不想这样做,因为我想删除一些实例,比如说SyTerm,但保留课程。顺便说一句,您不需要将id属性配置为
必需的
。EF有检测id属性的惯例,默认情况下它们是必需的,但如果您想显式配置id,请使用
Key
属性