UnitOfWork不会根据条件更新所有项目

时间:2012-04-11 11:04:37

标签: c# .net entity-framework unit-of-work

我有这个方法:

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符合条件时,如何设置它以使其不会更新?

2 个答案:

答案 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;