2012-04-11 4 views
0

Ich habe diese Methode:UnitOfWork aktualisiert nicht alle Elemente auf der Grundlage einer Bedingung

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; 
} 

Was ich versuche, hier zu tun ist, alle InvoiceLines durchlaufen und ihre OfficeUserId aktualisieren. Allerdings gibt es die Bedingung HasTwoUniqueApprovers und wenn dies false ist, möchte ich diese Rechnung nicht aktualisieren, aber lassen Sie es einfach.

Ok, so dass die Zeile:

invoiceLine.OfficeUserId = userId; 

Wird die Einheit Zustand EntityState.Modified korrekt aktualisiert werden?

Also, wenn:

_unitOfWork.Save(); 

Dadurch werden alle InvoiceLines sparen, weil es alles mit spart:

EntityState.Modified 

Also, was ich wissen will, ist, wie bestimmte InvoiceLines um zu verhindern, aktualisiert .

Wenn also eine invoiceLine die Bedingung erfüllt, wie stelle ich sie ein, damit sie nicht aktualisiert wird?

+0

Überprüfen Sie Bereiche und Einzüge, Sie haben einen Fehler. Ich habe es irgendwie bearbeitet. – abatishchev

Antwort

0

Entweder nicht OfficeUserId für die Leitung, die nicht gespeichert werden soll, oder den Status auf Unverändert zurücksetzen.

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

oder in DbContext API:

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

Innstead von HasTwoUniqueApprovers Überprüfung; Überprüfen Sie einfach, ob die Entität HasTwoUniqueApprovers diese Entität dann aktualisiert. Die anderen Entitäten, die "HasTwoUniqueApprovers" false haben, sind unverändert und werden nicht im Objektkontext verarbeitet.

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; 
}