![](/img/trans.png)
[英]Prevent EF from adding new child objects instead of just association when inserting new parent object?
[英]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.