0

私はこの方法を持っています:

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 が条件を満たしている場合、更新されないように設定するにはどうすればよいでしょうか?

4

2 に答える 2

2

チェックする代わりに!HasTwoUniqueApprovers; エンティティ HasTwoUniqueApprovers がこのエンティティを更新するかどうかを確認するだけです。「HasTwoUniqueApprovers」が false である他のエンティティは、変更されていない状態になり、オブジェクト コンテキストで処理されません。

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;
}
于 2012-04-11T11:13:35.527 に答える
0

OfficeUserId保存したくない行に設定しないか、状態をUnchangedに戻します。

objectContext.ObjectStateManager.ChangeObjectState(invoiceLine, EntityState.Unchanged);

またはDbContextAPIの場合:

dbContext.Entry(invoiceLine).State = EntityState.Unchanged;
于 2012-04-11T11:09:10.390 に答える