[英]Update entity on db with a property of list of entities with one-to-many relationship
[英]List of entities not remembering previously added entities for a one-to-many relationship
我有兩個實體,一個是一個班級,另一個是學生,我在班級實體中有一個注冊學生的列表。 我遇到的問題是,在我將一名學生添加到 RegisteredStudents 列表然后注銷並以另一名學生的身份重新登錄並嘗試注冊另一名學生后,RegisteredStudents 列表是空的! 它不記得之前添加的學生。
僅供參考 - 這是 EF 6+,ASP.Net MVC
這是我的代碼。
具有子項列表的父實體
public class Event
{
public Event() {
RegisteredStudents = new List<Student> ();
}
public int Name{ get; set; }
public DateTime Time{ get; set; }
// other properties
public List<Student> RegisteredStudents { get; set; }
}
正在添加到父級列表中的子實體
public class Student
{
public Student() {}
public int Name{ get; set; }
public DateTime Time{ get; set; }
// other properties
}
這是我添加新學生實體的方式。 我得到一個事件和學生
然后我添加學生。 這是在服務類方法中完成的,因此如果我以新學生的身份登錄,它將是相同的事件,但不同的學生。 無論哪種方式,在添加第一個學生並保存上下文后,列表都是空的。
var student= dbContext.Profiles.Where(i => i.ApplicationUserGuid == userId).First();
var event = dbContext.SpaceEvents.Where(j => j.SpaceEventId == eventId).First();
// 在這里做一些其他的stuff然后添加學生
event.RegisteredStudents.Add(student);
dbContext.SaveChanges();
添加單個學生並嘗試添加第二個后,當我將鼠標懸停在 RegisteredStudents 上時,它是空的!
正如您的標題所暗示的一對多關系,所以我假設您的學生類如下所示
public class Student
{
public Student() {}
public int Name{ get; set; }
public DateTime Time{ get; set; }
// other properties
public string EventId {get;set;}
public virtual Event Event {get; set; }
}
首先確保您的實體直接從數據庫上下文中正確加載。 關於加載實體的一些信息
延遲加載是在第一次訪問引用實體或實體的屬性時自動從數據庫加載實體或實體集合的過程。 使用 POCO 實體類型時,通過創建派生代理類型的實例,然后覆蓋虛擬屬性以添加加載鈎子來實現延遲加載。 MSDN 參考
您可以嘗試以下方法來正確地將學生添加到活動中
1) 學生對象中的更新事件
student.Event = event; //add this line here
event.RegisteredStudents.Add(student);
dbContext.SaveChanges();
2) 更新學生表中的外鍵
student.EventId = event.Id; //or add this line
event.RegisteredStudents.Add(student);
dbContext.SaveChanges();
3)檢查事件的狀態並相應地更新它
var state = dbContext.Entry(event).State;
if(state == EntityState.Detached)
dbContext.Events.Attach(event);
dbContext.Entry(event).State = EntityState.Modified;
如果您仍然遇到任何問題,我建議您在此處閱讀有關加載相關實體的更多信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.