2012-04-11 15 views
0

に基づいて、すべての項目を更新しません:たUnitOfWorkは、私は、このメソッドを持っている状態

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を更新したくないだけです。

[OK]を行よう:

invoiceLine.OfficeUserId = userId; 

は正しいEntityState.Modifiedにエンティティの状態を更新しますか?

ので:だから私は知りたいんだが更新されてから一定のinvoiceLInesを停止する方法である

EntityState.Modified 

_unitOfWork.Save(); 

それはですべてのものを保存しているためこれは、すべてのinvoiceLInesが保存されます。

したがって、invoiceLineが条件を満たす場合、どのように設定して更新されないのですか?

+0

スコープとインデントをチェックすると間違いがあります。私は何とか編集しました。 – abatishchev

答えて

0

保存したくない行にはOfficeUserIdを設定しないか、状態を[未変更]に戻します。 !

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

またはDbContext APIの

:HasTwoUniqueApproversをチェックする

dbContext.Entry(invoiceLine).State = EntityState.Unchanged; 
2

Innstead。エンティティ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; 
} 
関連する問題