[英]How to insert using many to many relationship with entity framework
我正在嘗試與小組和學生建立多對多的關系,因此學生可以被分配到許多小組,小組可以分配許多學生。 當我去調用context.savechanges()時,我一直收到錯誤。 在我的對象中,我確實有適當的配置,虛擬ICollection。 我的配置如下:
public class DataContext : DbContext
{
public DbSet<Student> StudentsContext { get; set; }
public DbSet<Group> GroupsContext { get; set; }
public DbSet<Phase> PhaseContext { get; set; }
public DbSet<Admin> AdminContext { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Student>()
.HasMany(g => g.Groups)
.WithMany(s => s.GroupMembers)
.Map(x => x.MapLeftKey("StudentId")
.MapRightKey("GroupId")
.ToTable("Student_XRef_Group"));
}
}
然后在控制器中作為測試,我會嘗試:
var phase = phaseRepository.Select().SingleOrDefault(x => x.PhaseId == phaseId);
phase.Groups.Clear();
//Testing
Group testGroup = new Group();
testGroup.GroupNumber = 1;
testGroup.GroupMembers.Add(AllStudents[0]); //Students of type Student
phase.Groups.Add(testGroup);
//Testing
context.SaveChanges();
然后,當它到達context.savechanges時,我收到以下錯誤:
操作失敗:無法更改關系,因為一個或多個外鍵屬性不可為空。 當對關系進行更改時,相關的外鍵屬性將設置為空值。 如果外鍵不支持空值,則必須定義新關系,必須為外鍵屬性分配另一個非空值,或者必須刪除不相關的對象。
**已解決**原來我調用phase.Groups.clear()是問題,為什么我不知道。 我希望也許現在可以告訴我為什么?
在這種情況下,對集合調用Clear()
只會嘗試分離Phase
和Group
之間的關系,而不是實際刪除對象。 因此,您嘗試將每個的外鍵引用設置為null,因此不可為空的異常。
我可以理解混淆的來源,畢竟我們可以使用phase.Groups.Add(...)
來添加一個新的實體,但重要的是要記住它不適用於Remove()
和Clear()
。
要實現所需,可以在每個組上使用DeleteObject()
來刪除:
context.Groups.DeleteObject(groupToDelete);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.