我正在开发一个MVC 4应用程序,我想知道更新相关表格数据的最佳方法是什么。
我有两个彼此相关的表,一个外键......一对多的关系:
表:非农就业数据
ID
PayrollDate
CompanyId
IsProcessed
IsComplete
表:PayrollDocuments
ID
DocumentUrl
UserId
PayrollId (FK)
IsApproved
我有View
,显示PayrollDocuments
的{{1}},如下所示:
Payroll
此for (int i = 0; i < Model.PayrollDocuments.Count; i++)
{
@Html.HiddenFor(model => Model.PayrollDocuments[i].ID)
@Html.HiddenFor(model => Model.PayrollDocuments[i].DocumentUrl)
@Html.HiddenFor(model => Model.PayrollDocuments[i].UserId)
PayrollDocument pd = Model.PayrollDocuments[i];
<div class="editor-label">
@pd.User.FirstName @pd.User.LastName
</div>
<a href="@pd.DocumentUrl" target="_blank">@pd.DocumentUrl</a><br />
@Html.EditorFor(model => Model.PayrollDocuments[i].IsApproved)
}
允许用户批准为特定View
添加的PayrollDocuments
。问题是传递Payroll对象以更新两个表只是更新Payroll
表。
Payroll
我要做的是循环遍历// update payroll
public Payroll UpdatePayroll(Payroll p)
{
try
{
Payroll _p = GetPayroll(p.ID);
this.Entity.Entry(_p).CurrentValues.SetValues(p);
this.Entity.SaveChanges();
return p;
}
catch (Exception ex)
{
throw ex;
}
}
列表并逐个更新它们。我很好奇这是否是正常做法。更新PayrollDocuments
对象以将Payroll
添加到数据库时,它可以正常工作。我无法理解为什么在不必遍历所有对象的情况下更新它无法正常工作。
答案 0 :(得分:0)
您必须像处理Payroll对象一样手动执行此操作。只有这样,实体框架才知道如何处理PayrollDocuments。如果您在HTTP上下文中,则会从任何数据库存储库中断开Payroll对象。您必须将它们显式添加到存储库,并定义每个对象应采取的操作。