EF 从父对象中删除子对象

本文关键字:对象 删除 EF | 更新日期: 2023-09-27 18:35:09

我使用 EF 为我的数据库表生成类:

public partial class Course
{
    public Course()
    {
        this.People = new HashSet<People>();
    }
    public int ID { get; set; }
    public string Name { get; set; }       
    public virtual ICollection<Person> People { get; private set; }     
}
public partial class Person
{
    public int ID { get; set; }
    public string Name { get; set; }
    public virtual Course Course { get; set; }
}

如您所见,每门课程都有一群人。我创建了第二个分部类,以便在刷新 EF 关系图时不会清除我的代码。 我的问题是如何从课程对象中清除人员列表?

我试过了:

public partial class Course
{    
      public void ResetCourse()
      {
          this.People.Clear();
      }
}

但是我收到此错误:

操作失败:无法更改关系,因为一个或多个外键属性不可为空。对关系进行更改时,相关的外键属性将设置为 null 值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

这显然是因为 EF 实际上并没有删除 person 对象,只是删除了 SQL 抛出的两者之间的关系,因为它不能具有空键。

显然我应该使用类似的东西 上下文。删除对象(人)

但是在课程对象中,它没有对上下文的引用,我想将代码保留在对象中以保持 ui 代码的简单性。

EF 从父对象中删除子对象

与其使用 Course 类来管理数据库操作;最好在使用实体框架时使用存储库和工作单元模式。否则,您的实体始终带有上下文;这将导致一些问题。

只需创建一个以上下文作为参数的课程存储库,并使用存储库中的数据库操作,而不是实体本身。指:工作单元和存储库模式