我正在开发一个MVC 4应用程序,我想知道更新相关表数据的最佳方法是什么。
我有两张有外键的桌子.一对多的关系:
表:
ID
PayrollDate
CompanyId
IsProcessed
IsComplete表: PayrollDocuments
ID
DocumentUrl
UserId
PayrollId (FK)
IsApproved我有一个View,它显示Payroll的PayrollDocuments,如下所示:
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使用户能够批准为特定Payroll添加的PayrollDocuments。问题是,传递薪资对象更新两个表只是更新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对象以将PayrollDocument添加到数据库时,它不会遇到任何问题。我真的不明白为什么在没有遍历所有对象的情况下更新它就不能工作。
发布于 2015-08-24 16:50:26
您必须手动执行此操作,就像处理薪资对象时所做的那样。只有这样,实体框架才知道如何处理PayrollDocuments。如果您处于HTTP上下文中,则薪资对象将与任何数据库存储库断开连接。您必须显式地将它们添加到存储库中,并为每个对象定义应该采取的操作。
https://stackoverflow.com/questions/32185177
复制相似问题