gpt4 book ai didi

c# - 如何使用集合导航属性更新实体(使用 MVC2)

转载 作者:行者123 更新时间:2023-11-30 20:11:10 25 4
gpt4 key购买 nike

我正在使用 MVC2 和 EF4 编写应用程序。我已经从我的数据库创建了实体,我有一个 Timesheet 表和一个 TimesheetEntry 表。

我正在使用 MVC2 的模型绑定(bind)功能,并成功接收了一个时间表对象,其时间表条目填充了用户创建的时间表条目。

如果我使用我在其他方法中使用过的技术(这里的timesheet是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 放入数据库 :-( 只是想知道我是否在这里一起咆哮错误的树?

附言如果有人想了解更多关于这些事情的信息,请告诉我。我可以发布更多代码。

最佳答案

这里的 timesheet 是由 MVC 映射创建的类<​​/p>

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();

根据需要更新、删除和添加引用的类,未完全测试

关于c# - 如何使用集合导航属性更新实体(使用 MVC2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4107065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com