[英]how do I update an entity with a collection navigation property (with MVC2)
我正在使用MVC2和EF4編寫應用程序。 我已經從數據庫中創建了實體,我有一個時間表表和一個時間表表表。
我正在使用MVC2的模型綁定功能,並成功接收到一個Timesheet對象,其TimesheetEntries中填充了用戶創建的TimesheetEntries。
如果我使用在其他方法中使用過的技術(此處的時間表是MVC框架創建的對象):
Timesheet temp = context.Timesheets
.Include("TimesheetEntries")
.Where(t => t.Id == timesheet.Id).First();
context.ApplyCurrentValues<Timesheet>(temp.EntityKey.EntitySetName, timesheet);
context.SaveChanges();
然后,我的TimesheetEntries不會保存。
我一直在嘗試通過其他方式來完成此操作,但沒有成功,例如刪除所有條目:
Timesheet temp = context.Timesheets
.Include("TimesheetEntries")
.Where(t => t.Id == timesheet.Id).First();
context.ApplyCurrentValues<Timesheet>(temp.EntityKey.EntitySetName, timesheet);
context.ExecuteStoreCommand(@"DELETE FROM TimesheetEntry WHERE Timesheet=" + timesheet.Id.ToString());
foreach (TimesheetEntry entry in timesheet.TimesheetEntries)
{
entry.Timesheet = timesheet.Id;
context.TimesheetEntries.AddObject(entry);
}
context.SaveChanges();
return Redirect("ListTimesheets?PersonnelId="+timesheet.Person);
這不能正常工作,我仍然沒有將TimesheetEntries放入數據庫:-(只想知道iam是否在這里一起樹錯了樹?
附言:如果有人想要有關這些事情的更多信息,請告訴我。 而且我可以發布更多代碼。
時間表再次是MVC映射創建的類
Timesheet DBTimesheet = context.Timesheets
.Include("TimesheetEntries")
.Where(t => t.Id == timesheet.Id).First();
//Delete if in database but not in submission
DBTimesheet.TimesheetEntries
.Where(dbE => !timesheet.TimesheetEntries.Any(e => e.Id == dbE.Id)).ToList()
.ForEach(dbE => context.TimesheetEntries.DeleteObject(dbE));
//Update if in submission and in database
timesheet.TimesheetEntries
.Where(e => DBTimesheet.TimesheetEntries.Any(dbE => dbE.Id == e.Id)).ToList()
.ForEach(e => context.TimesheetEntries.ApplyCurrentValues(e));
//Add if in submission but not in database
timesheet.TimesheetEntries
.Where(e => !DBTimesheet.TimesheetEntries.Any(dbE => dbE.Id == e.Id)).ToList()
.ForEach(e => DBTimesheet.TimesheetEntries.Add(e));
context.SaveChanges();
根據需要更新,刪除和添加引用的類,未經完全測試
閱讀適用於ApplyCurrentValues
的文檔; 它僅執行標量屬性。
但你可以這樣做:
Timesheet temp = context.Timesheets
.Include("TimesheetEntries")
.Where(t => t.Id == timesheet.Id).First();
context.ApplyCurrentValues<Timesheet>(temp.EntityKey.EntitySetName, timesheet);
foreach(var tse in timesheet.TimesheetEntries)
{
temp.TimesheetEntries.Add(tse); // or update, if need be.
}
context.SaveChanges();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.