我有这个方法:
public bool UpdateOfficeApprovers(IList<int> invoiceLinesToUpdate, int userId)
{
foreach (var invoiceLineId in invoiceLinesToUpdate)
{
var invoiceLine = _unitOfWork.InvoiceLineRepository.Get(invoiceLineId);
invoiceLine.OfficeUserId = userId;
if (!invoiceLine.HasTwoUniqueApprovers)
{
// do something here to avoid this line being updated
}
}
_unitOfWork.Save();
return hasUniqueApprovers;
}
我在这里要做的是浏览所有invoiceLines并更新他们的OfficeUserId。但是条件为HasTwoUniqueApprovers
,如果是false
,我不想更新此invoiceLine,只是保留它。
好的,这一行:
invoiceLine.OfficeUserId = userId;
将实体状态更新为EntityState.Modified
是否正确?
所以当:
_unitOfWork.Save();
这将保存所有invoiceLInes,因为它可以保存所有内容:
EntityState.Modified
所以我想知道的是如何阻止某些invoiceLInes被更新。
因此,当invoiceLine符合条件时,如何设置它以使其不会更新?
答案 0 :(得分:2)
旅行检查!HasTwoUniqueApprovers;只需检查实体HasTwoUniqueApprovers是否更新此实体。 “HasTwoUniqueApprovers”为false的其他实体将处于未更改状态,并且不会在objectcontext中处理它们。
public bool UpdateOfficeApprovers(IList<int> invoiceLinesToUpdate, int userId)
{
foreach (var invoiceLineId in invoiceLinesToUpdate)
{
var invoiceLine = _unitOfWork.InvoiceLineRepository.Get(invoiceLineId);
if (invoiceLine.HasTwoUniqueApprovers)
{
invoiceLine.OfficeUserId = userId;
}
}
_unitOfWork.Save();
return hasUniqueApprovers;
}
答案 1 :(得分:0)
要么不为您不想保存的行设置OfficeUserId
,要么将其状态设置为Unchanged。
objectContext.ObjectStateManager.ChangeObjectState(invoiceLine, EntityState.Unchanged);
或在DbContext API中:
dbContext.Entry(invoiceLine).State = EntityState.Unchanged;