簡體   English   中英

EF從父對象中刪除子對象

[英]EF remove child objects from within parent object

我已經使用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();
      }
}

但是我得到這個錯誤:

操作失敗:由於一個或多個外鍵屬性不可為空,因此無法更改該關系。 對關系進行更改時,相關的外鍵屬性將設置為空值。 如果外鍵不支持空值,則必須定義新的關系,必須為外鍵屬性分配另一個非空值,或者必須刪除不相關的對象。

這顯然是由於EF實際上並沒有刪除person對象,而只是刪除了SQL無法包含null鍵而拋出的兩者之間的關系。

顯然我應該使用諸如context.DeleteObject(person)之類的東西

但是在課程對象內部,它沒有上下文的引用,我想將代碼保留在對象內部,以簡化ui代碼。

而不是使用課程類來管理數據庫操作; 最好在與實體框架一起使用存儲庫和工作單元模式。 否則,您的實體始終帶有上下文。 這會導致一些問題。

只需使用上下文作為參數創建一個課程存儲庫,然后在存儲庫中使用數據庫操作而不是實體本身。 請參閱: 工作單元和存儲庫模式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM