簡體   English   中英

如何使用集合導航屬性更新實體(使用MVC2)

[英]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.

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